{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to DataFrames\n",
    "**[Bogumił Kamiński](http://bogumilkaminski.pl/about/), May 13, 2018**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "using DataFrames"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extras - selected functionalities of selected packages"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### FreqTables: creating cross tabulations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Int64,2}\n",
       "a ╲ b │  x   y   z\n",
       "──────┼───────────\n",
       "'a'   │ 93  90  76\n",
       "'b'   │ 67  77  93\n",
       "'c'   │ 82  86  97\n",
       "'d'   │ 91  81  67"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "using FreqTables\n",
    "df = DataFrame(a=rand('a':'d', 1000), b=rand([\"x\", \"y\", \"z\"], 1000))\n",
    "ft = freqtable(df, :a, :b) # observe that dimensions are sorted if possible"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(93, 93)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ft[1,1], ft['b', \"z\"] # you can index the result using numbers or names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Float64,2}\n",
       "a ╲ b │        x         y         z\n",
       "──────┼─────────────────────────────\n",
       "'a'   │ 0.359073   0.34749  0.293436\n",
       "'b'   │   0.2827  0.324895  0.392405\n",
       "'c'   │ 0.309434  0.324528  0.366038\n",
       "'d'   │ 0.380753  0.338912  0.280335"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prop(ft, 1) # getting proportions - 1 means we want to calculate them in rows (first dimension)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4×3 Named Array{Float64,2}\n",
       "a ╲ b │        x         y         z\n",
       "──────┼─────────────────────────────\n",
       "'a'   │ 0.279279  0.269461  0.228228\n",
       "'b'   │ 0.201201  0.230539  0.279279\n",
       "'c'   │ 0.246246  0.257485  0.291291\n",
       "'d'   │ 0.273273  0.242515  0.201201"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prop(ft, 2) # and columns are normalized to 1.0 now"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Named Array{Int64,1}\n",
       "Dim1  │ \n",
       "──────┼──\n",
       "3     │ 3\n",
       "1     │ 5\n",
       "2     │ 2\n",
       "4     │ 0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = categorical(rand(1:3, 10))\n",
    "levels!(x, [3, 1, 2, 4]) # reordering levels and adding an extra level\n",
    "freqtable(x) # order is preserved and not-used level is shown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Named Array{Int64,1}\n",
       "Dim1    │ \n",
       "────────┼──\n",
       "1       │ 2\n",
       "2       │ 1\n",
       "3       │ 1\n",
       "missing │ 1"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freqtable([1,1,2,3,missing]) # by default missings are listed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element Named Array{Int64,1}\n",
       "Dim1  │ \n",
       "──────┼──\n",
       "1     │ 2\n",
       "2     │ 1\n",
       "3     │ 1"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freqtable([1,1,2,3,missing], skipmissing=true) # but we can skip them"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta - working on `DataFrame`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>'a'</td><td>true</td></tr><tr><th>2</th><td>2</td><td>'b'</td><td>false</td></tr><tr><th>3</th><td>3</td><td>'c'</td><td>true</td></tr><tr><th>4</th><td>4</td><td>'d'</td><td>false</td></tr><tr><th>5</th><td>5</td><td>'e'</td><td>true</td></tr><tr><th>6</th><td>6</td><td>'f'</td><td>false</td></tr><tr><th>7</th><td>7</td><td>'g'</td><td>true</td></tr><tr><th>8</th><td>8</td><td>'h'</td><td>false</td></tr></tbody></table>"
      ],
      "text/plain": [
       "8×3 DataFrames.DataFrame\n",
       "│ Row │ x │ y   │ z     │\n",
       "├─────┼───┼─────┼───────┤\n",
       "│ 1   │ 1 │ 'a' │ true  │\n",
       "│ 2   │ 2 │ 'b' │ false │\n",
       "│ 3   │ 3 │ 'c' │ true  │\n",
       "│ 4   │ 4 │ 'd' │ false │\n",
       "│ 5   │ 5 │ 'e' │ true  │\n",
       "│ 6   │ 6 │ 'f' │ false │\n",
       "│ 7   │ 7 │ 'g' │ true  │\n",
       "│ 8   │ 8 │ 'h' │ false │"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "using DataFramesMeta\n",
    "df = DataFrame(x=1:8, y='a':'h', z=repeat([true,false], outer=4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Array{Int64,1}:\n",
       " 2\n",
       " 2\n",
       " 4\n",
       " 4\n",
       " 6\n",
       " 6\n",
       " 8\n",
       " 8"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@with(df, :x+:z) # expressions with columns of DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8-element Array{Char,1}:\n",
       " 'b'\n",
       " 'e'\n",
       " 'h'\n",
       " 'k'\n",
       " 'g'\n",
       " 'j'\n",
       " 'm'\n",
       " 'p'"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@with df begin # you can define code blocks\n",
    "    a = :x[:z]\n",
    "    b = :x[.!:z]\n",
    "    :y + [a; b]\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "\u001b[91mUndefVarError: a not defined\u001b[39m",
     "output_type": "error",
     "traceback": [
      "\u001b[91mUndefVarError: a not defined\u001b[39m",
      ""
     ]
    }
   ],
   "source": [
    "a # @with creates hard scope so variables do not leak out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3-element BitArray{1}:\n",
       "  true\n",
       " false\n",
       " false"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = DataFrame(a = [:a, :b, :c])\n",
    "@with(df2, :a .== ^(:a)) # sometimes we want to work on raw Symbol, ^() escapes it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>4</td><td>7</td></tr><tr><th>2</th><td>5</td><td>8</td></tr><tr><th>3</th><td>6</td><td>9</td></tr></tbody></table>"
      ],
      "text/plain": [
       "3×2 DataFrames.DataFrame\n",
       "│ Row │ y │ z │\n",
       "├─────┼───┼───┤\n",
       "│ 1   │ 4 │ 7 │\n",
       "│ 2   │ 5 │ 8 │\n",
       "│ 3   │ 6 │ 9 │"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = DataFrame(x=1:3, y=4:6, z=7:9)\n",
    "@with(df2, _I_(2:3)) # _I_(expression) is translated to df2[expression]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>'a'</td><td>true</td></tr><tr><th>2</th><td>3</td><td>'c'</td><td>true</td></tr></tbody></table>"
      ],
      "text/plain": [
       "2×3 DataFrames.DataFrame\n",
       "│ Row │ x │ y   │ z    │\n",
       "├─────┼───┼─────┼──────┤\n",
       "│ 1   │ 1 │ 'a' │ true │\n",
       "│ 2   │ 3 │ 'c' │ true │"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@where(df, :x .< 4, :z .== true) # very useful macro for filtering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>2</td><td>'a'</td></tr><tr><th>2</th><td>2</td><td>4</td><td>'b'</td></tr><tr><th>3</th><td>3</td><td>6</td><td>'c'</td></tr><tr><th>4</th><td>4</td><td>8</td><td>'d'</td></tr><tr><th>5</th><td>5</td><td>10</td><td>'e'</td></tr><tr><th>6</th><td>6</td><td>12</td><td>'f'</td></tr><tr><th>7</th><td>7</td><td>14</td><td>'g'</td></tr><tr><th>8</th><td>8</td><td>16</td><td>'h'</td></tr></tbody></table>"
      ],
      "text/plain": [
       "8×3 DataFrames.DataFrame\n",
       "│ Row │ x │ y  │ z   │\n",
       "├─────┼───┼────┼─────┤\n",
       "│ 1   │ 1 │ 2  │ 'a' │\n",
       "│ 2   │ 2 │ 4  │ 'b' │\n",
       "│ 3   │ 3 │ 6  │ 'c' │\n",
       "│ 4   │ 4 │ 8  │ 'd' │\n",
       "│ 5   │ 5 │ 10 │ 'e' │\n",
       "│ 6   │ 6 │ 12 │ 'f' │\n",
       "│ 7   │ 7 │ 14 │ 'g' │\n",
       "│ 8   │ 8 │ 16 │ 'h' │"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@select(df, :x, y = 2*:x, z=:y) # create a new DataFrame based on the old one"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th><th>a</th></tr></thead><tbody><tr><th>1</th><td>2</td><td>1</td><td>true</td><td>1</td></tr><tr><th>2</th><td>4</td><td>2</td><td>false</td><td>1</td></tr><tr><th>3</th><td>6</td><td>3</td><td>true</td><td>1</td></tr><tr><th>4</th><td>8</td><td>4</td><td>false</td><td>1</td></tr><tr><th>5</th><td>10</td><td>5</td><td>true</td><td>1</td></tr><tr><th>6</th><td>12</td><td>6</td><td>false</td><td>1</td></tr><tr><th>7</th><td>14</td><td>7</td><td>true</td><td>1</td></tr><tr><th>8</th><td>16</td><td>8</td><td>false</td><td>1</td></tr></tbody></table>"
      ],
      "text/plain": [
       "8×4 DataFrames.DataFrame\n",
       "│ Row │ x  │ y │ z     │ a │\n",
       "├─────┼────┼───┼───────┼───┤\n",
       "│ 1   │ 2  │ 1 │ true  │ 1 │\n",
       "│ 2   │ 4  │ 2 │ false │ 1 │\n",
       "│ 3   │ 6  │ 3 │ true  │ 1 │\n",
       "│ 4   │ 8  │ 4 │ false │ 1 │\n",
       "│ 5   │ 10 │ 5 │ true  │ 1 │\n",
       "│ 6   │ 12 │ 6 │ false │ 1 │\n",
       "│ 7   │ 14 │ 7 │ true  │ 1 │\n",
       "│ 8   │ 16 │ 8 │ false │ 1 │"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@transform(df, a=1, x = 2*:x, y=:x) # create a new DataFrame adding columns based on the old one"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "\u001b[91mKeyError: key :a not found\u001b[39m",
     "output_type": "error",
     "traceback": [
      "\u001b[91mKeyError: key :a not found\u001b[39m",
      "",
      "Stacktrace:",
      " [1] \u001b[1mgetindex\u001b[22m\u001b[22m at \u001b[1m.\\dict.jl:474\u001b[22m\u001b[22m [inlined]",
      " [2] \u001b[1mgetindex\u001b[22m\u001b[22m\u001b[1m(\u001b[22m\u001b[22m::DataFrames.Index, ::Symbol\u001b[1m)\u001b[22m\u001b[22m at \u001b[1mD:\\Software\\JULIA_PKG\\v0.6\\DataFrames\\src\\other\\index.jl:123\u001b[22m\u001b[22m",
      " [3] \u001b[1mgetindex\u001b[22m\u001b[22m at \u001b[1mD:\\Software\\JULIA_PKG\\v0.6\\DataFrames\\src\\dataframe\\dataframe.jl:258\u001b[22m\u001b[22m [inlined]",
      " [4] \u001b[1m(::##16#18)\u001b[22m\u001b[22m\u001b[1m(\u001b[22m\u001b[22m::DataFrames.DataFrame\u001b[1m)\u001b[22m\u001b[22m at \u001b[1mD:\\Software\\JULIA_PKG\\v0.6\\DataFramesMeta\\src\\DataFramesMeta.jl:72\u001b[22m\u001b[22m",
      " [5] \u001b[1m#transform#39\u001b[22m\u001b[22m\u001b[1m(\u001b[22m\u001b[22m::Array{Any,1}, ::Function, ::DataFrames.DataFrame\u001b[1m)\u001b[22m\u001b[22m at \u001b[1mD:\\Software\\JULIA_PKG\\v0.6\\DataFramesMeta\\src\\DataFramesMeta.jl:388\u001b[22m\u001b[22m",
      " [6] \u001b[1m(::DataFramesMeta.#kw##transform)\u001b[22m\u001b[22m\u001b[1m(\u001b[22m\u001b[22m::Array{Any,1}, ::DataFramesMeta.#transform, ::DataFrames.DataFrame\u001b[1m)\u001b[22m\u001b[22m at \u001b[1m.\\<missing>:0\u001b[22m\u001b[22m"
     ]
    }
   ],
   "source": [
    "@transform(df, a=1, b=:a) # old DataFrame is used and :a is not present there"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>8</td><td>'h'</td><td>false</td></tr><tr><th>2</th><td>6</td><td>'f'</td><td>false</td></tr><tr><th>3</th><td>4</td><td>'d'</td><td>false</td></tr><tr><th>4</th><td>2</td><td>'b'</td><td>false</td></tr><tr><th>5</th><td>7</td><td>'g'</td><td>true</td></tr><tr><th>6</th><td>5</td><td>'e'</td><td>true</td></tr><tr><th>7</th><td>3</td><td>'c'</td><td>true</td></tr><tr><th>8</th><td>1</td><td>'a'</td><td>true</td></tr></tbody></table>"
      ],
      "text/plain": [
       "8×3 DataFrames.DataFrame\n",
       "│ Row │ x │ y   │ z     │\n",
       "├─────┼───┼─────┼───────┤\n",
       "│ 1   │ 8 │ 'h' │ false │\n",
       "│ 2   │ 6 │ 'f' │ false │\n",
       "│ 3   │ 4 │ 'd' │ false │\n",
       "│ 4   │ 2 │ 'b' │ false │\n",
       "│ 5   │ 7 │ 'g' │ true  │\n",
       "│ 6   │ 5 │ 'e' │ true  │\n",
       "│ 7   │ 3 │ 'c' │ true  │\n",
       "│ 8   │ 1 │ 'a' │ true  │"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@orderby(df, :z, -:x) # sorting into a new data frame, less powerful than sort, but lightweight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>z</th><th>x</th><th>x²</th></tr></thead><tbody><tr><th>1</th><td>false</td><td>2</td><td>4</td></tr><tr><th>2</th><td>false</td><td>4</td><td>16</td></tr><tr><th>3</th><td>true</td><td>1</td><td>1</td></tr><tr><th>4</th><td>true</td><td>3</td><td>9</td></tr></tbody></table>"
      ],
      "text/plain": [
       "4×3 DataFrames.DataFrame\n",
       "│ Row │ z     │ x │ x² │\n",
       "├─────┼───────┼───┼────┤\n",
       "│ 1   │ false │ 2 │ 4  │\n",
       "│ 2   │ false │ 4 │ 16 │\n",
       "│ 3   │ true  │ 1 │ 1  │\n",
       "│ 4   │ true  │ 3 │ 9  │"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@linq df |> # chaining of operations on DataFrame\n",
    "    where(:x .< 5) |>\n",
    "    orderby(:z) |>\n",
    "    transform(x²=:x.^2) |>\n",
    "    select(:z, :x, :x²)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Array{Int64,1}:\n",
       " 1\n",
       " 2\n",
       " 3\n",
       " 4"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(df, col) = df[col] # you can define your own functions and put them in the chain\n",
    "@linq df |> where(:x .<= 4) |> f(:x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta - working on grouped `DataFrame`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrames.GroupedDataFrame  4 groups with keys: Symbol[:b]\n",
       "First Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a │ b   │\n",
       "├─────┼───┼─────┤\n",
       "│ 1   │ 1 │ 'a' │\n",
       "│ 2   │ 5 │ 'a' │\n",
       "│ 3   │ 9 │ 'a' │\n",
       "⋮\n",
       "Last Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 4  │ 'd' │\n",
       "│ 2   │ 8  │ 'd' │\n",
       "│ 3   │ 12 │ 'd' │"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a = 1:12, b = repeat('a':'d', outer=3))\n",
    "g = groupby(df, :b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>first</th><th>last</th><th>mean</th></tr></thead><tbody><tr><th>1</th><td>'a'</td><td>1</td><td>9</td><td>5.0</td></tr><tr><th>2</th><td>'b'</td><td>2</td><td>10</td><td>6.0</td></tr><tr><th>3</th><td>'c'</td><td>3</td><td>11</td><td>7.0</td></tr><tr><th>4</th><td>'d'</td><td>4</td><td>12</td><td>8.0</td></tr></tbody></table>"
      ],
      "text/plain": [
       "4×4 DataFrames.DataFrame\n",
       "│ Row │ b   │ first │ last │ mean │\n",
       "├─────┼─────┼───────┼──────┼──────┤\n",
       "│ 1   │ 'a' │ 1     │ 9    │ 5.0  │\n",
       "│ 2   │ 'b' │ 2     │ 10   │ 6.0  │\n",
       "│ 3   │ 'c' │ 3     │ 11   │ 7.0  │\n",
       "│ 4   │ 'd' │ 4     │ 12   │ 8.0  │"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@by(df, :b, first=first(:a), last=last(:a), mean=mean(:a)) # more convinient than by from DataFrames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>b</th><th>first</th><th>last</th><th>mean</th></tr></thead><tbody><tr><th>1</th><td>'a'</td><td>1</td><td>9</td><td>5.0</td></tr><tr><th>2</th><td>'b'</td><td>2</td><td>10</td><td>6.0</td></tr><tr><th>3</th><td>'c'</td><td>3</td><td>11</td><td>7.0</td></tr><tr><th>4</th><td>'d'</td><td>4</td><td>12</td><td>8.0</td></tr></tbody></table>"
      ],
      "text/plain": [
       "4×4 DataFrames.DataFrame\n",
       "│ Row │ b   │ first │ last │ mean │\n",
       "├─────┼─────┼───────┼──────┼──────┤\n",
       "│ 1   │ 'a' │ 1     │ 9    │ 5.0  │\n",
       "│ 2   │ 'b' │ 2     │ 10   │ 6.0  │\n",
       "│ 3   │ 'c' │ 3     │ 11   │ 7.0  │\n",
       "│ 4   │ 'd' │ 4     │ 12   │ 8.0  │"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@based_on(g, first=first(:a), last=last(:a), mean=mean(:a)) # the same as by but on grouped DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrames.GroupedDataFrame  2 groups with keys: Symbol[:b]\n",
       "First Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 3  │ 'c' │\n",
       "│ 2   │ 7  │ 'c' │\n",
       "│ 3   │ 11 │ 'c' │\n",
       "⋮\n",
       "Last Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 4  │ 'd' │\n",
       "│ 2   │ 8  │ 'd' │\n",
       "│ 3   │ 12 │ 'd' │"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@where(g, mean(:a) > 6.5) # filter gropus on aggregate conditions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrames.GroupedDataFrame  4 groups with keys: Symbol[:b]\n",
       "First Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 4  │ 'd' │\n",
       "│ 2   │ 8  │ 'd' │\n",
       "│ 3   │ 12 │ 'd' │\n",
       "⋮\n",
       "Last Group:\n",
       "3×2 DataFrames.SubDataFrame{Array{Int64,1}}\n",
       "│ Row │ a │ b   │\n",
       "├─────┼───┼─────┤\n",
       "│ 1   │ 1 │ 'a' │\n",
       "│ 2   │ 5 │ 'a' │\n",
       "│ 3   │ 9 │ 'a' │"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@orderby(g, -sum(:a)) # order groups on aggregate conditions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>center</th><th>centered</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>'a'</td><td>5.0</td><td>-4.0</td></tr><tr><th>2</th><td>5</td><td>'a'</td><td>5.0</td><td>0.0</td></tr><tr><th>3</th><td>9</td><td>'a'</td><td>5.0</td><td>4.0</td></tr><tr><th>4</th><td>2</td><td>'b'</td><td>6.0</td><td>-4.0</td></tr><tr><th>5</th><td>6</td><td>'b'</td><td>6.0</td><td>0.0</td></tr><tr><th>6</th><td>10</td><td>'b'</td><td>6.0</td><td>4.0</td></tr><tr><th>7</th><td>3</td><td>'c'</td><td>7.0</td><td>-4.0</td></tr><tr><th>8</th><td>7</td><td>'c'</td><td>7.0</td><td>0.0</td></tr><tr><th>9</th><td>11</td><td>'c'</td><td>7.0</td><td>4.0</td></tr><tr><th>10</th><td>4</td><td>'d'</td><td>8.0</td><td>-4.0</td></tr><tr><th>11</th><td>8</td><td>'d'</td><td>8.0</td><td>0.0</td></tr><tr><th>12</th><td>12</td><td>'d'</td><td>8.0</td><td>4.0</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×4 DataFrames.DataFrame\n",
       "│ Row │ a  │ b   │ center │ centered │\n",
       "├─────┼────┼─────┼────────┼──────────┤\n",
       "│ 1   │ 1  │ 'a' │ 5.0    │ -4.0     │\n",
       "│ 2   │ 5  │ 'a' │ 5.0    │ 0.0      │\n",
       "│ 3   │ 9  │ 'a' │ 5.0    │ 4.0      │\n",
       "│ 4   │ 2  │ 'b' │ 6.0    │ -4.0     │\n",
       "│ 5   │ 6  │ 'b' │ 6.0    │ 0.0      │\n",
       "│ 6   │ 10 │ 'b' │ 6.0    │ 4.0      │\n",
       "│ 7   │ 3  │ 'c' │ 7.0    │ -4.0     │\n",
       "│ 8   │ 7  │ 'c' │ 7.0    │ 0.0      │\n",
       "│ 9   │ 11 │ 'c' │ 7.0    │ 4.0      │\n",
       "│ 10  │ 4  │ 'd' │ 8.0    │ -4.0     │\n",
       "│ 11  │ 8  │ 'd' │ 8.0    │ 0.0      │\n",
       "│ 12  │ 12 │ 'd' │ 8.0    │ 4.0      │"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@transform(g, center = mean(:a), centered = :a - mean(:a)) # perform operations within a group and return ungroped DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>'a'</td></tr><tr><th>2</th><td>5</td><td>'a'</td></tr><tr><th>3</th><td>9</td><td>'a'</td></tr><tr><th>4</th><td>2</td><td>'b'</td></tr><tr><th>5</th><td>6</td><td>'b'</td></tr><tr><th>6</th><td>10</td><td>'b'</td></tr><tr><th>7</th><td>3</td><td>'c'</td></tr><tr><th>8</th><td>7</td><td>'c'</td></tr><tr><th>9</th><td>11</td><td>'c'</td></tr><tr><th>10</th><td>4</td><td>'d'</td></tr><tr><th>11</th><td>8</td><td>'d'</td></tr><tr><th>12</th><td>12</td><td>'d'</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×2 DataFrames.DataFrame\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 1  │ 'a' │\n",
       "│ 2   │ 5  │ 'a' │\n",
       "│ 3   │ 9  │ 'a' │\n",
       "│ 4   │ 2  │ 'b' │\n",
       "│ 5   │ 6  │ 'b' │\n",
       "│ 6   │ 10 │ 'b' │\n",
       "│ 7   │ 3  │ 'c' │\n",
       "│ 8   │ 7  │ 'c' │\n",
       "│ 9   │ 11 │ 'c' │\n",
       "│ 10  │ 4  │ 'd' │\n",
       "│ 11  │ 8  │ 'd' │\n",
       "│ 12  │ 12 │ 'd' │"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DataFrame(g) # a nice convinience function not defined in DataFrames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>'a'</td></tr><tr><th>2</th><td>5</td><td>'a'</td></tr><tr><th>3</th><td>9</td><td>'a'</td></tr><tr><th>4</th><td>2</td><td>'b'</td></tr><tr><th>5</th><td>6</td><td>'b'</td></tr><tr><th>6</th><td>10</td><td>'b'</td></tr><tr><th>7</th><td>3</td><td>'c'</td></tr><tr><th>8</th><td>7</td><td>'c'</td></tr><tr><th>9</th><td>11</td><td>'c'</td></tr><tr><th>10</th><td>4</td><td>'d'</td></tr><tr><th>11</th><td>8</td><td>'d'</td></tr><tr><th>12</th><td>12</td><td>'d'</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×2 DataFrames.DataFrame\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 1  │ 'a' │\n",
       "│ 2   │ 5  │ 'a' │\n",
       "│ 3   │ 9  │ 'a' │\n",
       "│ 4   │ 2  │ 'b' │\n",
       "│ 5   │ 6  │ 'b' │\n",
       "│ 6   │ 10 │ 'b' │\n",
       "│ 7   │ 3  │ 'c' │\n",
       "│ 8   │ 7  │ 'c' │\n",
       "│ 9   │ 11 │ 'c' │\n",
       "│ 10  │ 4  │ 'd' │\n",
       "│ 11  │ 8  │ 'd' │\n",
       "│ 12  │ 12 │ 'd' │"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@transform(g) # actually this is the same"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr></thead><tbody><tr><th>1</th><td>3</td><td>'c'</td></tr><tr><th>2</th><td>7</td><td>'c'</td></tr><tr><th>3</th><td>11</td><td>'c'</td></tr><tr><th>4</th><td>4</td><td>'d'</td></tr><tr><th>5</th><td>8</td><td>'d'</td></tr><tr><th>6</th><td>12</td><td>'d'</td></tr></tbody></table>"
      ],
      "text/plain": [
       "6×2 DataFrames.DataFrame\n",
       "│ Row │ a  │ b   │\n",
       "├─────┼────┼─────┤\n",
       "│ 1   │ 3  │ 'c' │\n",
       "│ 2   │ 7  │ 'c' │\n",
       "│ 3   │ 11 │ 'c' │\n",
       "│ 4   │ 4  │ 'd' │\n",
       "│ 5   │ 8  │ 'd' │\n",
       "│ 6   │ 12 │ 'd' │"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@linq df |> groupby(:b) |> where(mean(:a) > 6.5) |> DataFrame # you can do chaining on grouped DataFrames as well"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFramesMeta - rowwise operations on `DataFrame`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>1</td></tr><tr><th>2</th><td>2</td><td>2</td></tr><tr><th>3</th><td>3</td><td>3</td></tr><tr><th>4</th><td>4</td><td>4</td></tr><tr><th>5</th><td>5</td><td>1</td></tr><tr><th>6</th><td>6</td><td>2</td></tr><tr><th>7</th><td>7</td><td>3</td></tr><tr><th>8</th><td>8</td><td>4</td></tr><tr><th>9</th><td>9</td><td>1</td></tr><tr><th>10</th><td>10</td><td>2</td></tr><tr><th>11</th><td>11</td><td>3</td></tr><tr><th>12</th><td>12</td><td>4</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×2 DataFrames.DataFrame\n",
       "│ Row │ a  │ b │\n",
       "├─────┼────┼───┤\n",
       "│ 1   │ 1  │ 1 │\n",
       "│ 2   │ 2  │ 2 │\n",
       "│ 3   │ 3  │ 3 │\n",
       "│ 4   │ 4  │ 4 │\n",
       "│ 5   │ 5  │ 1 │\n",
       "│ 6   │ 6  │ 2 │\n",
       "│ 7   │ 7  │ 3 │\n",
       "│ 8   │ 8  │ 4 │\n",
       "│ 9   │ 9  │ 1 │\n",
       "│ 10  │ 10 │ 2 │\n",
       "│ 11  │ 11 │ 3 │\n",
       "│ 12  │ 12 │ 4 │"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = DataFrame(a = 1:12, b = repeat(1:4, outer=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×3 DataFrames.DataFrame\n",
       "│ Row │ a  │ b │ x   │\n",
       "├─────┼────┼───┼─────┤\n",
       "│ 1   │ 1  │ 1 │ no  │\n",
       "│ 2   │ 2  │ 2 │ no  │\n",
       "│ 3   │ 3  │ 3 │ no  │\n",
       "│ 4   │ 4  │ 4 │ no  │\n",
       "│ 5   │ 5  │ 1 │ no  │\n",
       "│ 6   │ 6  │ 2 │ no  │\n",
       "│ 7   │ 7  │ 3 │ no  │\n",
       "│ 8   │ 8  │ 4 │ yes │\n",
       "│ 9   │ 9  │ 1 │ no  │\n",
       "│ 10  │ 10 │ 2 │ no  │\n",
       "│ 11  │ 11 │ 3 │ no  │\n",
       "│ 12  │ 12 │ 4 │ yes │"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# such conditions are often needed but are complex to write\n",
    "@transform(df, x = ifelse.((:a .> 6) .& (:b .== 4), \"yes\", \"no\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×3 DataFrames.DataFrame\n",
       "│ Row │ a  │ b │ x   │\n",
       "├─────┼────┼───┼─────┤\n",
       "│ 1   │ 1  │ 1 │ no  │\n",
       "│ 2   │ 2  │ 2 │ no  │\n",
       "│ 3   │ 3  │ 3 │ no  │\n",
       "│ 4   │ 4  │ 4 │ no  │\n",
       "│ 5   │ 5  │ 1 │ no  │\n",
       "│ 6   │ 6  │ 2 │ no  │\n",
       "│ 7   │ 7  │ 3 │ no  │\n",
       "│ 8   │ 8  │ 4 │ yes │\n",
       "│ 9   │ 9  │ 1 │ no  │\n",
       "│ 10  │ 10 │ 2 │ no  │\n",
       "│ 11  │ 11 │ 3 │ no  │\n",
       "│ 12  │ 12 │ 4 │ yes │"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# one option is to use a function that works on a single observation and broadcast it\n",
    "myfun(a, b) = a > 6 && b == 4 ? \"yes\" : \"no\"\n",
    "@transform(df, x = myfun.(:a, :b))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>a</th><th>b</th><th>x</th></tr></thead><tbody><tr><th>1</th><td>1</td><td>1</td><td>no</td></tr><tr><th>2</th><td>2</td><td>2</td><td>no</td></tr><tr><th>3</th><td>3</td><td>3</td><td>no</td></tr><tr><th>4</th><td>4</td><td>4</td><td>no</td></tr><tr><th>5</th><td>5</td><td>1</td><td>no</td></tr><tr><th>6</th><td>6</td><td>2</td><td>no</td></tr><tr><th>7</th><td>7</td><td>3</td><td>no</td></tr><tr><th>8</th><td>8</td><td>4</td><td>yes</td></tr><tr><th>9</th><td>9</td><td>1</td><td>no</td></tr><tr><th>10</th><td>10</td><td>2</td><td>no</td></tr><tr><th>11</th><td>11</td><td>3</td><td>no</td></tr><tr><th>12</th><td>12</td><td>4</td><td>yes</td></tr></tbody></table>"
      ],
      "text/plain": [
       "12×3 DataFrames.DataFrame\n",
       "│ Row │ a  │ b │ x   │\n",
       "├─────┼────┼───┼─────┤\n",
       "│ 1   │ 1  │ 1 │ no  │\n",
       "│ 2   │ 2  │ 2 │ no  │\n",
       "│ 3   │ 3  │ 3 │ no  │\n",
       "│ 4   │ 4  │ 4 │ no  │\n",
       "│ 5   │ 5  │ 1 │ no  │\n",
       "│ 6   │ 6  │ 2 │ no  │\n",
       "│ 7   │ 7  │ 3 │ no  │\n",
       "│ 8   │ 8  │ 4 │ yes │\n",
       "│ 9   │ 9  │ 1 │ no  │\n",
       "│ 10  │ 10 │ 2 │ no  │\n",
       "│ 11  │ 11 │ 3 │ no  │\n",
       "│ 12  │ 12 │ 4 │ yes │"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# or you can use @byrow! macro that allows you to process DataFrame rowwise\n",
    "@byrow! df begin\n",
    "    @newcol x::Vector{String}\n",
    "    :x = :a > 6 && :b == 4 ? \"yes\" : \"no\"\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualizing data with StatPlots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "using StatPlots # you might need to setup Plots package and some plotting backend first"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we present only a minimal functionality of the package"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"data-frame\"><thead><tr><th></th><th>x</th><th>y</th><th>z</th></tr></thead><tbody><tr><th>1</th><td>-3.882</td><td>-0.519101</td><td>b</td></tr><tr><th>2</th><td>-3.29987</td><td>0.130268</td><td>b</td></tr><tr><th>3</th><td>-2.7486</td><td>0.0131799</td><td>b</td></tr><tr><th>4</th><td>-2.63399</td><td>0.10717</td><td>b</td></tr><tr><th>5</th><td>-2.6274</td><td>0.354841</td><td>b</td></tr><tr><th>6</th><td>-2.62056</td><td>-1.29455</td><td>b</td></tr><tr><th>7</th><td>-2.59918</td><td>0.123104</td><td>b</td></tr><tr><th>8</th><td>-2.54967</td><td>0.648164</td><td>b</td></tr><tr><th>9</th><td>-2.52371</td><td>-2.05875</td><td>b</td></tr><tr><th>10</th><td>-2.46726</td><td>1.55221</td><td>b</td></tr><tr><th>11</th><td>-2.46364</td><td>0.621606</td><td>b</td></tr><tr><th>12</th><td>-2.38138</td><td>0.904526</td><td>b</td></tr><tr><th>13</th><td>-2.37316</td><td>2.06792</td><td>b</td></tr><tr><th>14</th><td>-2.28959</td><td>1.54781</td><td>b</td></tr><tr><th>15</th><td>-2.26709</td><td>-0.431504</td><td>b</td></tr><tr><th>16</th><td>-2.14739</td><td>0.0591178</td><td>b</td></tr><tr><th>17</th><td>-2.11537</td><td>-1.57372</td><td>b</td></tr><tr><th>18</th><td>-2.03404</td><td>-0.309753</td><td>b</td></tr><tr><th>19</th><td>-2.02243</td><td>1.04564</td><td>b</td></tr><tr><th>20</th><td>-2.01157</td><td>1.24666</td><td>b</td></tr><tr><th>21</th><td>-2.0073</td><td>-0.539462</td><td>b</td></tr><tr><th>22</th><td>-1.96675</td><td>-0.363903</td><td>b</td></tr><tr><th>23</th><td>-1.96647</td><td>-3.0063</td><td>b</td></tr><tr><th>24</th><td>-1.95986</td><td>0.481416</td><td>b</td></tr><tr><th>25</th><td>-1.95737</td><td>0.215758</td><td>b</td></tr><tr><th>26</th><td>-1.92463</td><td>-0.865486</td><td>b</td></tr><tr><th>27</th><td>-1.91896</td><td>0.994521</td><td>b</td></tr><tr><th>28</th><td>-1.91253</td><td>0.998878</td><td>b</td></tr><tr><th>29</th><td>-1.88986</td><td>0.253745</td><td>b</td></tr><tr><th>30</th><td>-1.85343</td><td>-0.0724022</td><td>b</td></tr><tr><th>&vellip;</th><td>&vellip;</td><td>&vellip;</td><td>&vellip;</td></tr></tbody></table>"
      ],
      "text/plain": [
       "1000×3 DataFrames.DataFrame\n",
       "│ Row  │ x        │ y           │ z │\n",
       "├──────┼──────────┼─────────────┼───┤\n",
       "│ 1    │ -3.882   │ -0.519101   │ b │\n",
       "│ 2    │ -3.29987 │ 0.130268    │ b │\n",
       "│ 3    │ -2.7486  │ 0.0131799   │ b │\n",
       "│ 4    │ -2.63399 │ 0.10717     │ b │\n",
       "│ 5    │ -2.6274  │ 0.354841    │ b │\n",
       "│ 6    │ -2.62056 │ -1.29455    │ b │\n",
       "│ 7    │ -2.59918 │ 0.123104    │ b │\n",
       "│ 8    │ -2.54967 │ 0.648164    │ b │\n",
       "│ 9    │ -2.52371 │ -2.05875    │ b │\n",
       "│ 10   │ -2.46726 │ 1.55221     │ b │\n",
       "│ 11   │ -2.46364 │ 0.621606    │ b │\n",
       "⋮\n",
       "│ 989  │ 2.18961  │ 0.862102    │ a │\n",
       "│ 990  │ 2.23729  │ -1.88374    │ a │\n",
       "│ 991  │ 2.28583  │ 1.49663     │ a │\n",
       "│ 992  │ 2.29509  │ 0.638376    │ a │\n",
       "│ 993  │ 2.29738  │ -0.350854   │ a │\n",
       "│ 994  │ 2.38051  │ -1.1164     │ a │\n",
       "│ 995  │ 2.38293  │ -0.00973155 │ a │\n",
       "│ 996  │ 2.54832  │ 0.301696    │ a │\n",
       "│ 997  │ 2.56782  │ 0.458782    │ a │\n",
       "│ 998  │ 2.71839  │ 1.76825     │ a │\n",
       "│ 999  │ 2.72945  │ -0.810255   │ a │\n",
       "│ 1000 │ 3.12432  │ 0.0475414   │ a │"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "srand(1)\n",
    "df = DataFrame(x = sort(randn(1000)), y=randn(1000), z = [fill(\"b\", 500); fill(\"a\", 500)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip3500\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3500)\" points=\"\n",
       "0,400 600,400 600,0 0,0 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3501\">\n",
       "    <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3500)\" points=\"\n",
       "29.4661,375.869 580.315,375.869 580.315,11.811 29.4661,11.811 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3502\">\n",
       "    <rect x=\"29\" y=\"11\" width=\"552\" height=\"365\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  98.8103,375.869 98.8103,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  177.432,375.869 177.432,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  256.054,375.869 256.054,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  334.676,375.869 334.676,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  413.297,375.869 413.297,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  491.919,375.869 491.919,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  570.541,375.869 570.541,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,375.525 580.315,375.525 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,321.033 580.315,321.033 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,266.542 580.315,266.542 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,212.05 580.315,212.05 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,157.558 580.315,157.558 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,103.066 580.315,103.066 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,48.574 580.315,48.574 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 29.4661,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  98.8103,375.869 98.8103,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  177.432,375.869 177.432,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  256.054,375.869 256.054,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  334.676,375.869 334.676,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  413.297,375.869 413.297,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  491.919,375.869 491.919,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  570.541,375.869 570.541,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.525 37.7289,375.525 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,321.033 37.7289,321.033 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,266.542 37.7289,266.542 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,212.05 37.7289,212.05 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,157.558 37.7289,157.558 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,103.066 37.7289,103.066 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,48.574 37.7289,48.574 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 98.8103, 389.669)\" x=\"98.8103\" y=\"389.669\">-3</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 177.432, 389.669)\" x=\"177.432\" y=\"389.669\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 256.054, 389.669)\" x=\"256.054\" y=\"389.669\">-1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 334.676, 389.669)\" x=\"334.676\" y=\"389.669\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 413.297, 389.669)\" x=\"413.297\" y=\"389.669\">1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 491.919, 389.669)\" x=\"491.919\" y=\"389.669\">2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 570.541, 389.669)\" x=\"570.541\" y=\"389.669\">3</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 380.025)\" x=\"23.4661\" y=\"380.025\">-3</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 325.533)\" x=\"23.4661\" y=\"325.533\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 271.042)\" x=\"23.4661\" y=\"271.042\">-1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 216.55)\" x=\"23.4661\" y=\"216.55\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 162.058)\" x=\"23.4661\" y=\"162.058\">1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 107.566)\" x=\"23.4661\" y=\"107.566\">2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 53.074)\" x=\"23.4661\" y=\"53.074\">3</text>\n",
       "</g>\n",
       "<polyline clip-path=\"url(#clip3502)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,240.336 75.2343,204.951 118.576,211.331 127.586,206.21 128.105,192.714 128.642,282.592 130.324,205.341 134.216,176.73 136.257,324.235 140.695,127.467 \n",
       "  140.98,178.177 147.447,162.76 148.094,99.365 154.664,127.707 156.433,235.563 165.844,208.828 168.361,297.804 174.756,228.929 175.668,155.071 176.523,144.117 \n",
       "  176.858,241.446 180.047,231.879 180.068,375.869 180.588,185.816 180.783,200.293 183.358,259.212 183.804,157.856 184.309,157.619 186.091,198.223 188.955,215.995 \n",
       "  189.325,238.8 189.975,263.464 190.085,129.532 191.752,187.223 191.822,218.611 192.919,182.365 193.29,294.136 194.147,253.343 195.124,115.024 195.141,156.487 \n",
       "  195.214,158.161 197.585,203.621 198.679,191.288 199.447,248.67 200.243,246.25 201.422,174.226 202.335,205.712 202.552,324.486 203.343,83.1601 204.26,209.827 \n",
       "  206.779,165.736 207.379,163.618 207.874,173.084 208.069,249.889 209.172,219.564 209.414,112.078 209.611,231.487 209.814,147.603 210.568,305.97 211.98,138.031 \n",
       "  212.463,197.126 212.565,170.258 212.652,258.764 213.069,184.715 213.15,221.058 214.771,313.023 214.786,112.609 215.411,158.538 215.603,302.936 215.693,225.192 \n",
       "  215.965,197.408 216.575,229.123 216.897,182.575 219.053,179.585 219.184,279.982 219.36,219.575 219.683,233.92 219.889,152.972 220.045,284.335 220.612,179.747 \n",
       "  220.881,178.722 221.391,257.392 221.494,204.813 221.552,247.779 221.686,228.773 221.928,248.286 222.142,188.575 222.259,225.766 222.559,220.769 224.345,254.702 \n",
       "  224.904,131.36 225.057,176.048 225.145,125.897 225.395,231.785 225.776,205.198 225.94,141.237 227.299,164.579 227.528,201.29 227.692,166.759 228.652,164.427 \n",
       "  229.113,144.052 229.151,277.721 229.967,263.968 229.979,206.401 230.048,227.03 230.347,230.579 231.125,173.752 231.162,141.465 231.437,216.221 231.461,181.068 \n",
       "  233.06,217.152 233.328,163.547 233.338,288.902 233.588,98.0539 233.837,334.288 233.869,153.299 234.304,125.891 234.641,200.311 235.04,337.79 236.721,199.001 \n",
       "  236.901,196.865 237.114,143.294 237.176,282.084 237.26,316.849 237.304,184.397 237.438,270.91 237.678,257.631 237.828,285.989 237.931,179.55 238.056,194.298 \n",
       "  238.753,127.562 239.286,236.041 239.359,259.548 239.707,277.051 240.261,190.915 240.403,193.255 240.593,142.138 241.442,248.084 241.807,208.66 242.253,222.451 \n",
       "  242.308,208.197 242.607,230.77 243.196,175.703 243.355,244 244.29,265.133 244.394,282.048 244.772,338.897 244.938,285.181 245.709,133.049 246.762,234.961 \n",
       "  246.984,181.776 247.847,182.176 248.523,205.973 248.719,165.866 248.856,210.198 249.008,182.748 249.099,175.602 249.741,176.661 250.647,74.1777 250.806,215.47 \n",
       "  251.146,225.909 251.634,181.777 251.965,164.768 252.645,125.253 253.605,152.038 254.492,288.946 254.694,324.107 255.078,248.251 255.357,114.222 255.865,262.554 \n",
       "  256.125,187.713 256.235,319.458 257.33,198.681 257.392,308.101 257.874,281.957 258.281,182.088 258.395,246.151 258.92,287.359 259.105,257 259.362,249.205 \n",
       "  259.511,167.21 259.665,229.586 259.785,184.436 260.403,200.793 260.704,259.402 261.616,209.959 261.923,171.374 262.405,243.79 262.469,171.408 262.758,202.309 \n",
       "  263.171,284.388 263.406,135.671 263.677,135.398 264.251,169.815 264.271,81.5381 264.726,193.578 264.728,141.669 265.439,372.158 265.918,283.58 266.322,213.475 \n",
       "  267.172,179.794 267.305,232.888 267.329,229.856 267.42,247.984 267.462,278.079 267.598,37.3391 267.843,141.74 267.99,191.97 268.138,195.957 268.193,136.123 \n",
       "  268.349,166.024 268.471,248.261 268.71,162.517 269.478,177.115 269.564,92.6789 270.653,242.646 271.077,239.43 271.446,149.187 271.795,192.422 272.217,302.809 \n",
       "  272.248,95.6265 272.369,256.34 272.729,173.314 273.413,204.05 274.221,217.467 274.405,211.043 274.69,180.442 274.843,229.326 275.109,235.27 275.479,239.795 \n",
       "  275.846,203.011 276.066,204.72 276.468,244.671 276.541,152.806 276.823,265.504 277.175,233.12 277.577,218.509 277.65,181.07 277.697,175.77 278.349,193.362 \n",
       "  278.414,160.028 279.259,225.406 279.406,225.701 279.983,230.314 280.036,171.029 280.139,306.682 280.602,176.437 281.093,159.073 282.108,177.839 282.277,199.755 \n",
       "  282.293,222.907 282.42,153.209 282.593,199.966 282.834,172.028 283.03,116.94 283.034,265.121 283.918,228.483 284.222,235.726 284.616,155.566 284.691,256.055 \n",
       "  285.02,170.431 285.021,214.435 285.08,261.999 285.159,157.812 285.831,200.222 285.945,223.417 286.172,285.743 286.235,184.335 286.462,337.778 286.48,290.003 \n",
       "  286.562,218.974 286.703,176.485 286.833,117.887 287.4,170.468 287.543,311.42 287.551,114.266 287.689,186.346 288.22,321.315 288.61,274.367 288.67,223.98 \n",
       "  289.068,244.365 289.105,267.926 289.271,264.906 289.587,195.441 289.699,164.37 289.951,190.172 290.062,336.801 290.469,229.673 290.684,175.223 291.596,186.693 \n",
       "  291.72,201.658 291.812,177.759 291.958,154.45 292.358,244.036 292.596,241.453 292.872,193.932 292.977,217.412 293.058,93.6374 293.104,180.99 293.154,212.501 \n",
       "  293.382,149.285 293.534,255.967 293.546,278.885 293.609,168.893 293.647,157.473 293.722,215.468 293.782,285.313 293.916,163.567 294.141,52.0026 294.442,311.35 \n",
       "  294.511,268.343 294.58,277.497 294.673,203.34 294.966,313.833 295.028,155.243 295.466,208.296 295.634,128.907 295.727,142.608 295.81,221.601 295.972,209.695 \n",
       "  296.152,298.34 296.385,134.729 296.502,203.953 296.766,306.073 296.988,230.843 297.796,285.561 297.882,271.629 298.152,205.727 298.189,217.296 298.424,237.491 \n",
       "  298.487,198.979 298.952,265.932 299.281,197.413 299.378,152.261 299.995,220.687 300.175,215.583 300.179,262.584 300.183,173.243 300.246,206.525 300.407,193.572 \n",
       "  300.536,250.286 300.567,306.811 301.806,268.665 302.198,195.926 302.532,220.004 302.908,80.4537 303.325,158.503 303.335,212.991 303.536,222.11 303.542,310.642 \n",
       "  303.717,285.365 303.859,250.363 303.865,174.244 303.987,275.595 304.101,259.304 304.197,278.565 304.378,210.403 304.45,238.923 305.37,155.16 305.38,207.164 \n",
       "  305.673,153.806 305.678,187.502 305.749,159.122 305.794,273.667 305.829,267.606 306.194,258.419 306.287,197.16 306.352,191.588 306.73,160.172 306.864,319.946 \n",
       "  306.974,207.41 307.093,214.633 307.098,229.177 307.119,184.279 307.319,198.075 307.379,177.399 307.423,313.055 308.057,167.872 308.316,203.437 308.42,180.437 \n",
       "  309.041,218.097 309.281,264.825 310.094,233.481 310.373,225.345 310.468,254.311 310.759,189.483 310.98,240.204 311.007,156.075 311.119,119.707 311.217,149.83 \n",
       "  311.53,302.453 311.91,280.224 312.016,310.838 312.099,207.674 312.2,208.361 312.621,215.255 312.769,193.443 312.828,171.626 312.958,322.631 313.035,232.726 \n",
       "  313.093,156.567 313.206,189.628 313.369,105.087 313.371,231.768 313.38,196.589 313.549,138.752 313.678,216.975 314.026,309.797 314.117,204.948 314.443,180.159 \n",
       "  314.744,321.922 315.622,179.089 315.761,319.219 315.875,168.085 315.938,250.418 316.349,220.705 316.427,256.803 317.178,179.307 317.247,269.062 317.381,185.151 \n",
       "  317.893,164.098 318.273,256.624 318.484,162.031 318.784,178.427 318.812,271.994 319.119,202.913 319.144,191.894 319.159,213.783 319.298,115.578 319.367,122.76 \n",
       "  320.477,195.467 320.785,135.739 321.181,233.126 321.681,215.981 321.692,312.764 322.227,310.53 322.336,262.855 322.371,273.344 322.485,144.442 322.573,254.714 \n",
       "  322.713,175.477 322.759,241.821 323.754,335.553 323.968,169.17 324.54,304.425 324.935,314.276 325.523,149.354 325.59,238.818 325.705,141.312 325.72,268.301 \n",
       "  325.856,172.556 326.118,262.373 326.202,148.996 326.674,161.836 326.828,278.19 327.358,238.461 327.426,306.301 327.496,221.82 327.572,126.401 327.765,127.893 \n",
       "  327.96,250.763 328.298,193.289 328.359,162.082 328.392,192.517 328.684,160.001 328.856,304.042 328.879,133.934 328.925,161.113 329.111,182.557 329.127,209.018 \n",
       "  329.29,275.571 329.345,199.552 329.426,126.688 329.433,283.458 329.489,127.734 329.693,260.624 329.894,244.357 330.301,201.55 330.329,195.877 330.495,265.456 \n",
       "  330.709,127.446 330.982,205.387 331.329,211.307 332.142,295.57 332.296,249.627 332.393,145.237 332.529,173.826 332.64,188.583 332.658,262.157 332.931,188.09 \n",
       "  332.968,205.228 333.226,166.836 333.375,171.545 333.774,261.468 333.854,205.254 333.911,238.28 334.575,149.708 334.582,351.245 334.774,141.391 334.871,128.994 \n",
       "  335.226,201.894 335.269,208.319 335.314,191.35 335.317,125.646 335.405,195.972 335.657,224.717 335.785,214.338 335.982,201.312 336.005,171.184 336.054,141.316 \n",
       "  336.356,269.219 336.421,157.491 336.597,244.206 336.992,217.55 337.138,164.05 337.588,224.075 338.146,216.588 338.942,177.032 339.144,262.31 339.168,215.736 \n",
       "  339.449,223.325 339.607,118.151 339.8,229.34 339.926,184.21 340.17,232.997 340.216,235.787 340.265,280.615 340.626,170.993 340.788,255.299 340.859,217.356 \n",
       "  341.076,310.499 341.109,86.601 341.234,154.168 341.497,150.426 341.533,227.289 341.695,218.571 342.26,311.012 342.71,202.195 343.205,242.518 343.306,145.924 \n",
       "  343.332,265.855 343.406,244.204 343.722,254.802 343.876,211.893 343.882,215.061 344.17,224.474 344.416,254.057 344.828,158.597 344.979,171.949 344.991,226.652 \n",
       "  345.008,267.942 345.033,280.038 345.039,162.791 345.114,245.327 345.151,310.474 345.235,283.576 345.784,281.015 345.818,177.054 345.86,183.441 345.93,111.087 \n",
       "  345.938,109.343 346.099,146.912 346.383,169.084 346.461,227.51 346.563,291.637 346.577,128.819 346.681,176.424 346.956,193.47 346.992,338.146 347.093,308.703 \n",
       "  347.248,328.682 347.343,130.515 347.432,204.572 347.542,239.381 347.9,256.449 347.999,229.135 348.086,291.217 348.097,254.688 348.145,238.354 348.359,294.925 \n",
       "  348.568,260.736 348.69,191.724 348.992,118.223 349.075,293.869 349.276,110.189 349.907,100.259 350.199,274.536 350.368,213.337 350.485,128.252 350.539,224.442 \n",
       "  350.668,180.845 350.78,282.286 350.867,167.426 350.893,179.996 350.9,223.374 351.021,292.576 351.055,129.294 351.185,273.265 351.274,263.054 351.786,203.899 \n",
       "  351.994,290.212 352.803,145.588 353.345,206.98 353.408,234.031 353.85,183.308 353.873,256.172 354.357,174.161 354.981,180.085 355.056,242.857 355.109,215.886 \n",
       "  355.122,261.364 355.169,243.262 355.306,172.338 355.34,311.607 355.641,137.172 355.774,185.002 356.046,279.897 356.09,259.972 356.098,296.107 356.506,158.475 \n",
       "  356.516,119.898 356.584,309.652 356.914,303.375 357.373,246.817 357.701,190.013 358.01,152.684 358.049,174.537 358.056,128.285 358.28,262.289 358.323,166.025 \n",
       "  358.439,159.474 358.489,269.323 358.595,270.957 358.659,214.559 359.061,174.691 359.136,296.561 359.257,196.494 359.314,226.832 359.384,244.561 359.836,252.789 \n",
       "  359.882,210.461 359.895,182.446 360.263,287.246 360.322,226.648 360.536,146.49 361.418,183.177 361.424,175.202 361.548,215.53 362.299,279.586 362.478,241.959 \n",
       "  362.599,250.511 362.912,249.274 362.937,224.175 363.281,115.561 363.44,223.982 364.087,230.577 364.252,295.34 364.432,301.696 364.442,171.049 364.447,318.345 \n",
       "  364.661,196.304 364.74,154.415 364.866,228.557 364.872,214.936 365.06,247.508 365.195,219.974 365.226,286.608 365.285,240.348 365.454,131.93 365.524,127.193 \n",
       "  366.08,191.971 366.308,184.359 366.375,197.859 366.581,195.385 366.658,142.125 366.784,276.476 366.842,188.746 366.952,142.237 367.66,89.9274 368.132,219.903 \n",
       "  368.219,206.014 368.319,223.486 368.364,163.592 368.396,177.988 368.595,358.411 368.664,343.801 368.699,108.144 368.856,187.024 368.868,242.257 369.456,194.926 \n",
       "  369.479,202.204 370.129,118.1 370.354,159.85 370.747,154.869 370.818,177.538 371.112,129.298 371.333,138.792 371.338,148.06 371.506,236.75 371.684,196.646 \n",
       "  372.035,229.227 372.315,297.297 372.347,229.918 372.375,206.526 372.405,185.793 372.774,11.811 373.372,188.087 373.853,138.603 374.506,202.044 374.736,252.98 \n",
       "  374.821,239.744 375.29,210.08 375.321,316.091 375.446,255.345 376.069,185.472 376.342,215.155 376.68,185.651 377.361,219.478 377.445,232.617 377.502,245.209 \n",
       "  377.575,195.386 377.985,169.732 378.054,304.761 378.213,247.784 378.278,263.528 378.467,160.963 378.537,225.901 379.096,176.537 379.309,184.213 379.381,229.53 \n",
       "  379.721,258.932 380.209,239.119 380.343,255.836 380.544,177.844 380.568,192.013 380.689,245.601 381.233,156.008 381.453,220.884 381.919,222.135 382.252,315.186 \n",
       "  382.32,134.826 382.621,239.719 382.93,136.416 383.236,155.716 383.27,269.798 383.287,229.046 383.47,173.879 383.487,134.341 383.698,160.152 383.725,224.775 \n",
       "  383.947,300.802 384.006,289.409 384.309,219.262 384.531,186.731 384.576,253.989 384.886,209.547 384.952,104.676 385.004,189.616 385.213,221.349 385.331,247.224 \n",
       "  385.395,202.146 385.424,130.261 385.782,270.878 385.836,88.549 386.148,265.44 386.156,164.294 386.434,261.264 386.846,184.803 387.171,245.712 387.357,211.52 \n",
       "  387.599,302.284 387.772,218.248 388.083,93.7075 388.415,164.751 389.053,299.248 389.095,161.25 389.34,190.713 389.406,240.774 389.677,275.23 389.752,243.357 \n",
       "  391.36,232.793 391.93,216.199 392.164,155.941 392.375,192.31 392.669,172.731 393.339,211.359 393.836,111.025 394.043,143.144 394.118,162.566 394.38,162.412 \n",
       "  394.526,208.716 394.703,232.483 394.731,232.957 394.733,128.646 395.589,231.431 395.642,163.173 396.205,163.561 396.631,244.48 397.254,182.823 397.361,169.77 \n",
       "  398.801,165.003 399.335,348.149 399.538,254.432 399.551,166.927 399.738,272.252 399.974,91.2114 400.134,231.082 400.424,130.778 400.559,257.384 400.56,239.756 \n",
       "  400.81,284.619 401.008,261.404 401.102,140.487 401.212,144.267 401.34,226.705 401.493,265.747 401.861,197.14 402.366,192.144 402.41,185.723 402.641,235.387 \n",
       "  402.712,269.044 402.747,265.964 402.805,159.905 402.821,203.716 403.068,263.566 403.219,216.727 403.227,286.393 403.269,293.564 403.31,77.2251 403.39,255.868 \n",
       "  403.687,156.282 403.998,280.184 404.954,143.006 406.053,161.869 406.215,232.665 407.058,170.748 407.215,130.113 408.043,212.609 408.591,182.619 409.181,254.713 \n",
       "  409.819,196.608 410.15,157.66 410.41,250.263 411.266,181.898 411.302,72.9541 411.586,242.002 411.904,191.766 412.216,202.763 412.356,258.85 413.031,264.508 \n",
       "  413.053,144.106 413.193,220.259 413.243,271.108 413.255,142.932 413.442,195.221 413.449,242.739 414.107,210.51 414.146,221.614 414.286,346.131 414.369,270.969 \n",
       "  415.018,255.202 415.664,207.515 416.849,110.97 417.528,232.95 417.839,269.143 418.316,297.146 418.505,160.674 419.908,199.846 419.956,331.779 420.196,154.298 \n",
       "  421.01,217.225 421.758,247.307 421.786,251.086 422.054,271.358 422.708,259.844 422.727,262.509 423.321,187.839 423.472,313.193 423.923,278.175 423.975,271.526 \n",
       "  424.313,188.769 424.919,326.373 425.033,145.969 425.285,165.341 425.41,206.026 426.905,202.096 427.031,281.913 427.852,112.824 428.176,263.091 428.491,111.568 \n",
       "  428.512,207.318 428.55,317.283 429.504,170.317 429.969,252.049 430.788,251.32 431.05,238.744 431.519,138.357 432.189,236.238 432.93,220.106 432.96,314.462 \n",
       "  433.202,180.38 433.723,223.651 435.073,276.326 435.889,211.315 436.152,195.239 436.877,172.723 437.545,139.749 437.665,212.258 438.13,300.729 438.404,207.773 \n",
       "  438.624,181.871 439.308,165.466 439.593,187.199 439.788,198.461 440.128,172.483 440.788,255.099 441.53,202.321 441.649,367.535 441.71,164.854 443.834,268.065 \n",
       "  445.106,86.8876 445.115,179.859 445.332,177.502 445.622,263.517 445.906,245.133 446.718,182.313 446.799,229.66 447.259,159.229 447.376,205.982 447.573,236.824 \n",
       "  447.93,206.268 448.018,250.497 448.902,142.041 450.083,205.061 451.75,154.932 452.536,123.697 452.568,218.334 452.603,103.038 454.323,303.965 454.359,271.297 \n",
       "  454.43,189.212 455.05,278.348 456.152,253.348 456.344,177.945 457.331,331.402 457.767,236.386 458.648,239.669 459.761,207.034 459.766,335.246 460.235,208.169 \n",
       "  461.239,228.59 462.473,267.527 462.851,218.673 463.04,166.02 463.113,217.548 463.754,257.36 466.425,210.71 466.442,267.089 466.573,223.214 467.519,264.106 \n",
       "  471.097,175.959 472.548,242.523 475.986,300.021 476.136,174.816 477.204,318.592 479.482,147.457 479.937,125.708 482.533,219.911 484.19,211.473 484.52,210.975 \n",
       "  485.126,244.131 485.38,234.045 487.893,144.037 488.101,241.11 489.688,154.481 490.514,177.891 492.404,217.625 492.678,298.728 495.952,259.397 497.937,234.75 \n",
       "  498.541,209.506 498.883,238.15 499.315,280.962 500.613,294.552 502.139,236.128 504.454,340.082 504.651,230.61 506.687,329.551 506.826,165.072 510.575,314.698 \n",
       "  514.391,130.495 515.119,177.263 515.3,231.168 521.836,272.884 522.026,212.58 535.029,195.61 536.562,187.05 548.4,115.694 549.269,256.202 580.315,209.459 \n",
       "  \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3500)\" points=\"\n",
       "47.4661,62.931 127.514,62.931 127.514,32.691 47.4661,32.691 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  47.4661,62.931 127.514,62.931 127.514,32.691 47.4661,32.691 47.4661,62.931 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3500)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  53.4661,47.811 89.4661,47.811 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip3500)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 95.4661, 52.311)\" x=\"95.4661\" y=\"52.311\">y(x)</text>\n",
       "</g>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df plot(:x, :y, legend=:topleft, label=\"y(x)\") # a most basic plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip3700\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3700)\" points=\"\n",
       "0,400 600,400 600,0 0,0 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3701\">\n",
       "    <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3700)\" points=\"\n",
       "32.4745,375.869 580.315,375.869 580.315,11.811 32.4745,11.811 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3702\">\n",
       "    <rect x=\"32\" y=\"11\" width=\"549\" height=\"365\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  79.874,375.869 79.874,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  205.748,375.869 205.748,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  331.621,375.869 331.621,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.495,375.869 457.495,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  32.4745,287.019 580.315,287.019 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  32.4745,198.168 580.315,198.168 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  32.4745,109.317 580.315,109.317 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  32.4745,20.4661 580.315,20.4661 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,375.869 32.4745,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  79.874,375.869 79.874,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  205.748,375.869 205.748,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  331.621,375.869 331.621,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.495,375.869 457.495,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,287.019 40.6921,287.019 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,198.168 40.6921,198.168 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,109.317 40.6921,109.317 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3700)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,20.4661 40.6921,20.4661 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 79.874, 389.669)\" x=\"79.874\" y=\"389.669\">-4</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 205.748, 389.669)\" x=\"205.748\" y=\"389.669\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 331.621, 389.669)\" x=\"331.621\" y=\"389.669\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.495, 389.669)\" x=\"457.495\" y=\"389.669\">2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.4745, 291.519)\" x=\"26.4745\" y=\"291.519\">0.1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.4745, 202.668)\" x=\"26.4745\" y=\"202.668\">0.2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.4745, 113.817)\" x=\"26.4745\" y=\"113.817\">0.3</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3700)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.4745, 24.9661)\" x=\"26.4745\" y=\"24.9661\">0.4</text>\n",
       "</g>\n",
       "<polyline clip-path=\"url(#clip3702)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  32.4745,375.869 35.2414,375.868 38.0082,375.867 40.7751,375.864 43.542,375.86 46.3088,375.851 49.0757,375.836 51.8426,375.811 54.6095,375.774 57.3763,375.718 \n",
       "  60.1432,375.639 62.9101,375.533 65.6769,375.399 68.4438,375.236 71.2107,375.051 73.9776,374.853 76.7444,374.657 79.5113,374.479 82.2782,374.336 85.045,374.24 \n",
       "  87.8119,374.198 90.5788,374.208 93.3457,374.261 96.1125,374.34 98.8794,374.424 101.646,374.493 104.413,374.53 107.18,374.526 109.947,374.48 112.714,374.403 \n",
       "  115.481,374.307 118.247,374.212 121.014,374.13 123.781,374.07 126.548,374.026 129.315,373.98 132.082,373.899 134.849,373.74 137.616,373.452 140.382,372.982 \n",
       "  143.149,372.288 145.916,371.338 148.683,370.124 151.45,368.663 154.217,367 156.984,365.209 159.751,363.378 162.517,361.605 165.284,359.982 168.051,358.577 \n",
       "  170.818,357.423 173.585,356.505 176.352,355.76 179.119,355.081 181.886,354.32 184.652,353.315 187.419,351.898 190.186,349.924 192.953,347.281 195.72,343.906 \n",
       "  198.487,339.787 201.254,334.958 204.02,329.486 206.787,323.451 209.554,316.93 212.321,309.981 215.088,302.636 217.855,294.906 220.622,286.794 223.389,278.315 \n",
       "  226.155,269.521 228.922,260.508 231.689,251.431 234.456,242.491 237.223,233.916 239.99,225.93 242.757,218.721 245.524,212.406 248.29,207.01 251.057,202.453 \n",
       "  253.824,198.554 256.591,195.053 259.358,191.633 262.125,187.968 264.892,183.747 267.659,178.714 270.425,172.684 273.192,165.553 275.959,157.309 278.726,148.023 \n",
       "  281.493,137.858 284.26,127.054 287.027,115.925 289.794,104.838 292.56,94.1787 295.327,84.3157 298.094,75.5473 300.861,68.059 303.628,61.8912 306.395,56.9298 \n",
       "  309.162,52.9225 311.928,49.5211 314.695,46.3424 317.462,43.0373 320.229,39.3545 322.996,35.1875 325.763,30.5961 328.53,25.7978 331.297,21.1337 334.063,17.0148 \n",
       "  336.83,13.8596 339.597,12.0351 342.364,11.811 345.131,13.3325 347.898,16.6154 350.665,21.5604 353.432,27.9815 356.198,35.6406 358.965,44.283 361.732,53.6654 \n",
       "  364.499,63.5756 367.266,73.8414 370.033,84.3317 372.8,94.9505 375.567,105.629 378.333,116.315 381.1,126.965 383.867,137.536 386.634,147.978 389.401,158.233 \n",
       "  392.168,168.233 394.935,177.909 397.701,187.196 400.468,196.05 403.235,204.449 406.002,212.413 408.769,219.996 411.536,227.286 414.303,234.395 417.07,241.435 \n",
       "  419.836,248.506 422.603,255.67 425.37,262.937 428.137,270.262 430.904,277.543 433.671,284.637 436.438,291.382 439.205,297.627 441.971,303.256 444.738,308.209 \n",
       "  447.505,312.497 450.272,316.196 453.039,319.433 455.806,322.368 458.573,325.167 461.34,327.974 464.106,330.895 466.873,333.987 469.64,337.253 472.407,340.651 \n",
       "  475.174,344.105 477.941,347.521 480.708,350.802 483.474,353.865 486.241,356.654 489.008,359.136 491.775,361.311 494.542,363.199 497.309,364.837 500.076,366.265 \n",
       "  502.843,367.519 505.609,368.627 508.376,369.605 511.143,370.461 513.91,371.2 516.677,371.826 519.444,372.348 522.211,372.781 524.978,373.145 527.744,373.46 \n",
       "  530.511,373.746 533.278,374.018 536.045,374.282 538.812,374.539 541.579,374.786 544.346,375.013 547.113,375.216 549.879,375.388 552.646,375.528 555.413,375.637 \n",
       "  558.18,375.717 560.947,375.773 563.714,375.811 566.481,375.836 569.247,375.851 572.014,375.86 574.781,375.864 577.548,375.867 580.315,375.868 \n",
       "  \"/>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df density(:x, label=\"\") # density plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip3900\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3900)\" points=\"\n",
       "0,400 600,400 600,0 0,0 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3901\">\n",
       "    <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip3900)\" points=\"\n",
       "35.8198,375.869 580.315,375.869 580.315,11.811 35.8198,11.811 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip3902\">\n",
       "    <rect x=\"35\" y=\"11\" width=\"545\" height=\"365\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  153.965,375.869 153.965,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  290.945,375.869 290.945,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  427.925,375.869 427.925,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  564.905,375.869 564.905,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  35.8198,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  35.8198,271.254 580.315,271.254 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  35.8198,166.64 580.315,166.64 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  35.8198,62.0259 580.315,62.0259 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,375.869 35.8198,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  153.965,375.869 153.965,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  290.945,375.869 290.945,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  427.925,375.869 427.925,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  564.905,375.869 564.905,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,375.869 43.9872,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,271.254 43.9872,271.254 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,166.64 43.9872,166.64 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  35.8198,62.0259 43.9872,62.0259 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 153.965, 389.669)\" x=\"153.965\" y=\"389.669\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 290.945, 389.669)\" x=\"290.945\" y=\"389.669\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 427.925, 389.669)\" x=\"427.925\" y=\"389.669\">2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 564.905, 389.669)\" x=\"564.905\" y=\"389.669\">4</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 29.8198, 380.369)\" x=\"29.8198\" y=\"380.369\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 29.8198, 275.754)\" x=\"29.8198\" y=\"275.754\">50</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 29.8198, 171.14)\" x=\"29.8198\" y=\"171.14\">100</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 29.8198, 66.5259)\" x=\"29.8198\" y=\"66.5259\">150</text>\n",
       "</g>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "51.23,373.776 51.23,375.869 85.475,375.869 85.475,373.776 51.23,373.776 51.23,373.776 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  51.23,373.776 51.23,375.869 85.475,375.869 85.475,373.776 51.23,373.776 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "85.475,367.5 85.475,375.869 119.72,375.869 119.72,367.5 85.475,367.5 85.475,367.5 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  85.475,367.5 85.475,375.869 119.72,375.869 119.72,367.5 85.475,367.5 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "119.72,327.746 119.72,375.869 153.965,375.869 153.965,327.746 119.72,327.746 119.72,327.746 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  119.72,327.746 119.72,375.869 153.965,375.869 153.965,327.746 119.72,327.746 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "153.965,246.147 153.965,375.869 188.21,375.869 188.21,246.147 153.965,246.147 153.965,246.147 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  153.965,246.147 153.965,375.869 188.21,375.869 188.21,246.147 153.965,246.147 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "188.21,195.932 188.21,375.869 222.455,375.869 222.455,195.932 188.21,195.932 188.21,195.932 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  188.21,195.932 188.21,375.869 222.455,375.869 222.455,195.932 188.21,195.932 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "222.455,68.3027 222.455,375.869 256.7,375.869 256.7,68.3027 222.455,68.3027 222.455,68.3027 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  222.455,68.3027 222.455,375.869 256.7,375.869 256.7,68.3027 222.455,68.3027 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "256.7,28.5493 256.7,375.869 290.945,375.869 290.945,28.5493 256.7,28.5493 256.7,28.5493 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  256.7,28.5493 256.7,375.869 290.945,375.869 290.945,28.5493 256.7,28.5493 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "290.945,11.811 290.945,375.869 325.19,375.869 325.19,11.811 290.945,11.811 290.945,11.811 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  290.945,11.811 290.945,375.869 325.19,375.869 325.19,11.811 290.945,11.811 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "325.19,11.811 325.19,375.869 359.435,375.869 359.435,11.811 325.19,11.811 325.19,11.811 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  325.19,11.811 325.19,375.869 359.435,375.869 359.435,11.811 325.19,11.811 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "359.435,189.655 359.435,375.869 393.68,375.869 393.68,189.655 359.435,189.655 359.435,189.655 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  359.435,189.655 359.435,375.869 393.68,375.869 393.68,189.655 359.435,189.655 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "393.68,267.07 393.68,375.869 427.925,375.869 427.925,267.07 393.68,267.07 393.68,267.07 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  393.68,267.07 393.68,375.869 427.925,375.869 427.925,267.07 393.68,267.07 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "427.925,340.3 427.925,375.869 462.17,375.869 462.17,340.3 427.925,340.3 427.925,340.3 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  427.925,340.3 427.925,375.869 462.17,375.869 462.17,340.3 427.925,340.3 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "462.17,369.592 462.17,375.869 496.415,375.869 496.415,369.592 462.17,369.592 462.17,369.592 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  462.17,369.592 462.17,375.869 496.415,375.869 496.415,369.592 462.17,369.592 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "496.415,373.776 496.415,375.869 530.66,375.869 530.66,373.776 496.415,373.776 496.415,373.776 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  496.415,373.776 496.415,375.869 530.66,375.869 530.66,373.776 496.415,373.776 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3902)\" points=\"\n",
       "530.66,373.776 530.66,375.869 564.905,375.869 564.905,373.776 530.66,373.776 530.66,373.776 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3902)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  530.66,373.776 530.66,375.869 564.905,375.869 564.905,373.776 530.66,373.776 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3900)\" points=\"\n",
       "496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 496.298,62.931 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip3900)\" points=\"\n",
       "502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip3900)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip3900)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 544.298, 52.311)\" x=\"544.298\" y=\"52.311\">y</text>\n",
       "</g>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df histogram(:y, label=\"y\") # and a histogram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip4100\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip4100)\" points=\"\n",
       "0,400 600,400 600,0 0,0 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip4101\">\n",
       "    <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip4100)\" points=\"\n",
       "29.4661,375.869 580.315,375.869 580.315,11.811 29.4661,11.811 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip4102\">\n",
       "    <rect x=\"29\" y=\"11\" width=\"552\" height=\"365\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,371.35 580.315,371.35 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,273.309 580.315,273.309 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,175.269 580.315,175.269 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,77.2288 580.315,77.2288 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 29.4661,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,375.869 160.538,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,375.869 449.243,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,371.35 37.7289,371.35 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,273.309 37.7289,273.309 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,175.269 37.7289,175.269 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,77.2288 37.7289,77.2288 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 160.538, 389.669)\" x=\"160.538\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 449.243, 389.669)\" x=\"449.243\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 375.85)\" x=\"23.4661\" y=\"375.85\">-4</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 277.809)\" x=\"23.4661\" y=\"277.809\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 179.769)\" x=\"23.4661\" y=\"179.769\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 81.7288)\" x=\"23.4661\" y=\"81.7288\">2</text>\n",
       "</g>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"58.576\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"58.576\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"58.4574\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"58.4574\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"50.35\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"50.35\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"49.3943\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"49.3943\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"42.013\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"42.013\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"41.4713\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"41.4713\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"22.1145\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"160.538\" cy=\"22.1145\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"365.565\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"365.565\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"337.029\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"337.029\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"310.006\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"310.006\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"304.388\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"304.388\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"304.065\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"304.065\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"303.73\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"303.73\" r=\"3\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"302.681\" r=\"4\"/>\n",
       "<circle clip-path=\"url(#clip4102)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"449.243\" cy=\"302.681\" r=\"3\"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "160.538,174.926 45.0562,174.926 276.02,174.926 160.538,174.926 160.538,160.768 160.538,174.926 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,174.926 45.0562,174.926 276.02,174.926 160.538,174.926 160.538,160.768 160.538,174.926 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "45.0562,160.768 45.0562,144.618 276.02,144.618 276.02,160.768 45.0562,160.768 45.0562,160.768 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  45.0562,160.768 45.0562,144.618 276.02,144.618 276.02,160.768 45.0562,160.768 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "45.0562,120.379 45.0562,144.618 276.02,144.618 276.02,120.379 45.0562,120.379 45.0562,120.379 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  45.0562,120.379 45.0562,144.618 276.02,144.618 276.02,120.379 45.0562,120.379 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "160.538,62.6512 45.0562,62.6512 276.02,62.6512 160.538,62.6512 160.538,120.379 160.538,62.6512 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  160.538,62.6512 45.0562,62.6512 276.02,62.6512 160.538,62.6512 160.538,120.379 160.538,62.6512 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "449.243,300.254 333.761,300.254 564.725,300.254 449.243,300.254 449.243,235.917 449.243,300.254 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,300.254 333.761,300.254 564.725,300.254 449.243,300.254 449.243,235.917 449.243,300.254 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "333.761,235.917 333.761,207.934 564.725,207.934 564.725,235.917 333.761,235.917 333.761,235.917 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  333.761,235.917 333.761,207.934 564.725,207.934 564.725,235.917 333.761,235.917 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "333.761,192.316 333.761,207.934 564.725,207.934 564.725,192.316 333.761,192.316 333.761,192.316 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  333.761,192.316 333.761,207.934 564.725,207.934 564.725,192.316 333.761,192.316 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4102)\" points=\"\n",
       "449.243,175.147 333.761,175.147 564.725,175.147 449.243,175.147 449.243,192.316 449.243,175.147 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4102)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  449.243,175.147 333.761,175.147 564.725,175.147 449.243,175.147 449.243,192.316 449.243,175.147 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4100)\" points=\"\n",
       "496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 496.298,62.931 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4100)\" points=\"\n",
       "502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4100)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip4100)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 544.298, 52.311)\" x=\"544.298\" y=\"52.311\">x</text>\n",
       "</g>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df boxplot(:z, :x, label=\"x\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
       "<defs>\n",
       "  <clipPath id=\"clip4300\">\n",
       "    <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip4300)\" points=\"\n",
       "0,400 600,400 600,0 0,0 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip4301\">\n",
       "    <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polygon clip-path=\"url(#clip4300)\" points=\"\n",
       "29.4661,375.869 580.315,375.869 580.315,11.811 29.4661,11.811 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<defs>\n",
       "  <clipPath id=\"clip4302\">\n",
       "    <rect x=\"29\" y=\"11\" width=\"552\" height=\"365\"/>\n",
       "  </clipPath>\n",
       "</defs>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,321.472 580.315,321.472 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,266.844 580.315,266.844 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,212.215 580.315,212.215 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,157.586 580.315,157.586 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,102.957 580.315,102.957 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
       "  29.4661,48.3287 580.315,48.3287 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 580.315,375.869 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,375.869 29.4661,11.811 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  151.877,375.869 151.877,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  457.904,375.869 457.904,370.408 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,321.472 37.7289,321.472 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,266.844 37.7289,266.844 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,212.215 37.7289,212.215 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,157.586 37.7289,157.586 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,102.957 37.7289,102.957 \n",
       "  \"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  29.4661,48.3287 37.7289,48.3287 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 151.877, 389.669)\" x=\"151.877\" y=\"389.669\">a</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 457.904, 389.669)\" x=\"457.904\" y=\"389.669\">b</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 325.972)\" x=\"23.4661\" y=\"325.972\">-2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 271.344)\" x=\"23.4661\" y=\"271.344\">-1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 216.715)\" x=\"23.4661\" y=\"216.715\">0</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 162.086)\" x=\"23.4661\" y=\"162.086\">1</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 107.457)\" x=\"23.4661\" y=\"107.457\">2</text>\n",
       "</g>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 23.4661, 52.8287)\" x=\"23.4661\" y=\"52.8287\">3</text>\n",
       "</g>\n",
       "<polygon clip-path=\"url(#clip4302)\" points=\"\n",
       "155.484,367.753 156.071,365.365 156.715,362.976 157.42,360.587 158.184,358.198 159.007,355.809 159.889,353.42 160.827,351.031 161.819,348.642 162.865,346.254 \n",
       "  163.966,343.865 165.125,341.476 166.349,339.087 167.647,336.698 169.03,334.309 170.509,331.92 172.094,329.531 173.79,327.143 175.599,324.754 177.513,322.365 \n",
       "  179.522,319.976 181.607,317.587 183.747,315.198 185.917,312.809 188.097,310.42 190.271,308.032 192.43,305.643 194.577,303.254 196.723,300.865 198.895,298.476 \n",
       "  201.124,296.087 203.451,293.698 205.915,291.309 208.554,288.921 211.393,286.532 214.447,284.143 217.713,281.754 221.168,279.365 224.774,276.976 228.479,274.587 \n",
       "  232.22,272.198 235.932,269.81 239.554,267.421 243.031,265.032 246.322,262.643 249.403,260.254 252.262,257.865 254.902,255.476 257.338,253.087 259.59,250.699 \n",
       "  261.682,248.31 263.633,245.921 265.458,243.532 267.163,241.143 268.745,238.754 270.188,236.365 271.468,233.976 272.554,231.588 273.41,229.199 273.998,226.81 \n",
       "  274.288,224.421 274.256,222.032 273.894,219.643 273.211,217.254 272.233,214.865 271.009,212.477 269.6,210.088 268.081,207.699 266.531,205.31 265.023,202.921 \n",
       "  263.62,200.532 262.367,198.143 261.284,195.754 260.367,193.366 259.588,190.977 258.898,188.588 258.235,186.199 257.527,183.81 256.704,181.421 255.702,179.032 \n",
       "  254.466,176.643 252.958,174.255 251.155,171.866 249.053,169.477 246.664,167.088 244.015,164.699 241.146,162.31 238.105,159.921 234.947,157.532 231.725,155.144 \n",
       "  228.491,152.755 225.289,150.366 222.151,147.977 219.097,145.588 216.138,143.199 213.271,140.81 210.486,138.421 207.769,136.033 205.104,133.644 202.479,131.255 \n",
       "  199.882,128.866 197.308,126.477 194.759,124.088 192.238,121.699 189.753,119.31 187.314,116.922 184.934,114.533 182.625,112.144 180.397,109.755 178.263,107.366 \n",
       "  176.231,104.977 174.309,102.588 172.498,100.199 170.8,97.8105 169.211,95.4216 167.722,93.0328 166.325,90.6439 165.007,88.255 163.76,85.8661 162.573,83.4773 \n",
       "  161.44,81.0884 160.359,78.6995 159.33,76.3106 158.356,73.9218 157.443,71.5329 156.597,69.144 155.825,66.7551 155.13,64.3663 154.517,61.9774 153.985,59.5885 \n",
       "  153.535,57.1996 153.161,54.8108 152.859,52.4219 152.623,50.033 152.447,47.6441 152.322,45.2553 152.242,42.8664 152.202,40.4775 152.197,38.0886 152.22,35.6998 \n",
       "  152.267,33.3109 152.334,30.922 152.415,28.5331 152.504,26.1443 152.596,23.7554 152.684,21.3665 152.761,18.9776 152.823,16.5888 152.863,14.1999 152.879,11.811 \n",
       "  150.875,11.811 150.891,14.1999 150.931,16.5888 150.993,18.9776 151.07,21.3665 151.158,23.7554 151.25,26.1443 151.339,28.5331 151.42,30.922 151.487,33.3109 \n",
       "  151.534,35.6998 151.557,38.0886 151.552,40.4775 151.512,42.8664 151.432,45.2553 151.307,47.6441 151.131,50.033 150.895,52.4219 150.593,54.8108 150.219,57.1996 \n",
       "  149.769,59.5885 149.237,61.9774 148.624,64.3663 147.929,66.7551 147.157,69.144 146.311,71.5329 145.398,73.9218 144.424,76.3106 143.395,78.6995 142.314,81.0884 \n",
       "  141.181,83.4773 139.994,85.8661 138.747,88.255 137.429,90.6439 136.032,93.0328 134.543,95.4216 132.953,97.8105 131.256,100.199 129.445,102.588 127.523,104.977 \n",
       "  125.491,107.366 123.357,109.755 121.129,112.144 118.82,114.533 116.44,116.922 114.001,119.31 111.516,121.699 108.995,124.088 106.446,126.477 103.872,128.866 \n",
       "  101.275,131.255 98.6496,133.644 95.9852,136.033 93.2682,138.421 90.4833,140.81 87.616,143.199 84.6566,145.588 81.6034,147.977 78.4651,150.366 75.2627,152.755 \n",
       "  72.0289,155.144 68.8074,157.532 65.6489,159.921 62.6081,162.31 59.7388,164.699 57.0899,167.088 54.7008,169.477 52.5989,171.866 50.7962,174.255 49.2879,176.643 \n",
       "  48.052,179.032 47.0496,181.421 46.2269,183.81 45.5192,186.199 44.8556,188.588 44.1658,190.977 43.3867,193.366 42.4698,195.754 41.387,198.143 40.1338,200.532 \n",
       "  38.7313,202.921 37.2233,205.31 35.6728,207.699 34.154,210.088 32.7452,212.477 31.5207,214.865 30.5432,217.254 29.8597,219.643 29.4978,222.032 29.4661,224.421 \n",
       "  29.7559,226.81 30.3444,229.199 31.1998,231.588 32.2857,233.976 33.566,236.365 35.0091,238.754 36.5906,241.143 38.2961,243.532 40.1213,245.921 42.0724,248.31 \n",
       "  44.1638,250.699 46.4161,253.087 48.8521,255.476 51.4924,257.865 54.3511,260.254 57.4315,262.643 60.7232,265.032 64.2003,267.421 67.8219,269.81 71.5342,272.198 \n",
       "  75.2752,274.587 78.9798,276.976 82.586,279.365 86.0411,281.754 89.3066,284.143 92.3608,286.532 95.2003,288.921 97.8386,291.309 100.303,293.698 102.63,296.087 \n",
       "  104.859,298.476 107.031,300.865 109.177,303.254 111.324,305.643 113.483,308.032 115.657,310.42 117.837,312.809 120.007,315.198 122.147,317.587 124.232,319.976 \n",
       "  126.241,322.365 128.155,324.754 129.964,327.143 131.66,329.531 133.245,331.92 134.724,334.309 136.107,336.698 137.405,339.087 138.629,341.476 139.788,343.865 \n",
       "  140.889,346.254 141.935,348.642 142.927,351.031 143.865,353.42 144.747,355.809 145.57,358.198 146.334,360.587 147.039,362.976 147.683,365.365 148.27,367.753 \n",
       "  155.484,367.753 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  155.484,367.753 156.071,365.365 156.715,362.976 157.42,360.587 158.184,358.198 159.007,355.809 159.889,353.42 160.827,351.031 161.819,348.642 162.865,346.254 \n",
       "  163.966,343.865 165.125,341.476 166.349,339.087 167.647,336.698 169.03,334.309 170.509,331.92 172.094,329.531 173.79,327.143 175.599,324.754 177.513,322.365 \n",
       "  179.522,319.976 181.607,317.587 183.747,315.198 185.917,312.809 188.097,310.42 190.271,308.032 192.43,305.643 194.577,303.254 196.723,300.865 198.895,298.476 \n",
       "  201.124,296.087 203.451,293.698 205.915,291.309 208.554,288.921 211.393,286.532 214.447,284.143 217.713,281.754 221.168,279.365 224.774,276.976 228.479,274.587 \n",
       "  232.22,272.198 235.932,269.81 239.554,267.421 243.031,265.032 246.322,262.643 249.403,260.254 252.262,257.865 254.902,255.476 257.338,253.087 259.59,250.699 \n",
       "  261.682,248.31 263.633,245.921 265.458,243.532 267.163,241.143 268.745,238.754 270.188,236.365 271.468,233.976 272.554,231.588 273.41,229.199 273.998,226.81 \n",
       "  274.288,224.421 274.256,222.032 273.894,219.643 273.211,217.254 272.233,214.865 271.009,212.477 269.6,210.088 268.081,207.699 266.531,205.31 265.023,202.921 \n",
       "  263.62,200.532 262.367,198.143 261.284,195.754 260.367,193.366 259.588,190.977 258.898,188.588 258.235,186.199 257.527,183.81 256.704,181.421 255.702,179.032 \n",
       "  254.466,176.643 252.958,174.255 251.155,171.866 249.053,169.477 246.664,167.088 244.015,164.699 241.146,162.31 238.105,159.921 234.947,157.532 231.725,155.144 \n",
       "  228.491,152.755 225.289,150.366 222.151,147.977 219.097,145.588 216.138,143.199 213.271,140.81 210.486,138.421 207.769,136.033 205.104,133.644 202.479,131.255 \n",
       "  199.882,128.866 197.308,126.477 194.759,124.088 192.238,121.699 189.753,119.31 187.314,116.922 184.934,114.533 182.625,112.144 180.397,109.755 178.263,107.366 \n",
       "  176.231,104.977 174.309,102.588 172.498,100.199 170.8,97.8105 169.211,95.4216 167.722,93.0328 166.325,90.6439 165.007,88.255 163.76,85.8661 162.573,83.4773 \n",
       "  161.44,81.0884 160.359,78.6995 159.33,76.3106 158.356,73.9218 157.443,71.5329 156.597,69.144 155.825,66.7551 155.13,64.3663 154.517,61.9774 153.985,59.5885 \n",
       "  153.535,57.1996 153.161,54.8108 152.859,52.4219 152.623,50.033 152.447,47.6441 152.322,45.2553 152.242,42.8664 152.202,40.4775 152.197,38.0886 152.22,35.6998 \n",
       "  152.267,33.3109 152.334,30.922 152.415,28.5331 152.504,26.1443 152.596,23.7554 152.684,21.3665 152.761,18.9776 152.823,16.5888 152.863,14.1999 152.879,11.811 \n",
       "  150.875,11.811 150.891,14.1999 150.931,16.5888 150.993,18.9776 151.07,21.3665 151.158,23.7554 151.25,26.1443 151.339,28.5331 151.42,30.922 151.487,33.3109 \n",
       "  151.534,35.6998 151.557,38.0886 151.552,40.4775 151.512,42.8664 151.432,45.2553 151.307,47.6441 151.131,50.033 150.895,52.4219 150.593,54.8108 150.219,57.1996 \n",
       "  149.769,59.5885 149.237,61.9774 148.624,64.3663 147.929,66.7551 147.157,69.144 146.311,71.5329 145.398,73.9218 144.424,76.3106 143.395,78.6995 142.314,81.0884 \n",
       "  141.181,83.4773 139.994,85.8661 138.747,88.255 137.429,90.6439 136.032,93.0328 134.543,95.4216 132.953,97.8105 131.256,100.199 129.445,102.588 127.523,104.977 \n",
       "  125.491,107.366 123.357,109.755 121.129,112.144 118.82,114.533 116.44,116.922 114.001,119.31 111.516,121.699 108.995,124.088 106.446,126.477 103.872,128.866 \n",
       "  101.275,131.255 98.6496,133.644 95.9852,136.033 93.2682,138.421 90.4833,140.81 87.616,143.199 84.6566,145.588 81.6034,147.977 78.4651,150.366 75.2627,152.755 \n",
       "  72.0289,155.144 68.8074,157.532 65.6489,159.921 62.6081,162.31 59.7388,164.699 57.0899,167.088 54.7008,169.477 52.5989,171.866 50.7962,174.255 49.2879,176.643 \n",
       "  48.052,179.032 47.0496,181.421 46.2269,183.81 45.5192,186.199 44.8556,188.588 44.1658,190.977 43.3867,193.366 42.4698,195.754 41.387,198.143 40.1338,200.532 \n",
       "  38.7313,202.921 37.2233,205.31 35.6728,207.699 34.154,210.088 32.7452,212.477 31.5207,214.865 30.5432,217.254 29.8597,219.643 29.4978,222.032 29.4661,224.421 \n",
       "  29.7559,226.81 30.3444,229.199 31.1998,231.588 32.2857,233.976 33.566,236.365 35.0091,238.754 36.5906,241.143 38.2961,243.532 40.1213,245.921 42.0724,248.31 \n",
       "  44.1638,250.699 46.4161,253.087 48.8521,255.476 51.4924,257.865 54.3511,260.254 57.4315,262.643 60.7232,265.032 64.2003,267.421 67.8219,269.81 71.5342,272.198 \n",
       "  75.2752,274.587 78.9798,276.976 82.586,279.365 86.0411,281.754 89.3066,284.143 92.3608,286.532 95.2003,288.921 97.8386,291.309 100.303,293.698 102.63,296.087 \n",
       "  104.859,298.476 107.031,300.865 109.177,303.254 111.324,305.643 113.483,308.032 115.657,310.42 117.837,312.809 120.007,315.198 122.147,317.587 124.232,319.976 \n",
       "  126.241,322.365 128.155,324.754 129.964,327.143 131.66,329.531 133.245,331.92 134.724,334.309 136.107,336.698 137.405,339.087 138.629,341.476 139.788,343.865 \n",
       "  140.889,346.254 141.935,348.642 142.927,351.031 143.865,353.42 144.747,355.809 145.57,358.198 146.334,360.587 147.039,362.976 147.683,365.365 148.27,367.753 \n",
       "  155.484,367.753 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4302)\" points=\"\n",
       "460.248,375.869 460.426,373.568 460.611,371.267 460.815,368.966 461.056,366.665 461.349,364.364 461.715,362.064 462.172,359.763 462.736,357.462 463.423,355.161 \n",
       "  464.244,352.86 465.206,350.559 466.314,348.258 467.569,345.958 468.971,343.657 470.514,341.356 472.19,339.055 473.988,336.754 475.89,334.453 477.874,332.152 \n",
       "  479.913,329.852 481.971,327.551 484.01,325.25 485.989,322.949 487.869,320.648 489.616,318.347 491.206,316.046 492.632,313.745 493.898,311.445 495.032,309.144 \n",
       "  496.072,306.843 497.073,304.542 498.093,302.241 499.192,299.94 500.424,297.639 501.83,295.339 503.434,293.038 505.243,290.737 507.245,288.436 509.416,286.135 \n",
       "  511.719,283.834 514.109,281.533 516.541,279.233 518.972,276.932 521.36,274.631 523.672,272.33 525.882,270.029 527.971,267.728 529.93,265.427 531.756,263.127 \n",
       "  533.458,260.826 535.05,258.525 536.555,256.224 537.998,253.923 539.412,251.622 540.828,249.321 542.277,247.021 543.786,244.72 545.377,242.419 547.066,240.118 \n",
       "  548.865,237.817 550.776,235.516 552.799,233.215 554.927,230.915 557.148,228.614 559.444,226.313 561.792,224.012 564.16,221.711 566.511,219.41 568.803,217.109 \n",
       "  570.989,214.809 573.02,212.508 574.853,210.207 576.449,207.906 577.78,205.605 578.829,203.304 579.595,201.003 580.084,198.703 580.315,196.402 580.308,194.101 \n",
       "  580.082,191.8 579.654,189.499 579.027,187.198 578.198,184.897 577.153,182.597 575.871,180.296 574.327,177.995 572.497,175.694 570.363,173.393 567.915,171.092 \n",
       "  565.154,168.791 562.096,166.491 558.765,164.19 555.201,161.889 551.45,159.588 547.565,157.287 543.601,154.986 539.614,152.685 535.655,150.385 531.767,148.084 \n",
       "  527.984,145.783 524.328,143.482 520.807,141.181 517.421,138.88 514.156,136.579 510.993,134.278 507.912,131.978 504.89,129.677 501.913,127.376 498.972,125.075 \n",
       "  496.067,122.774 493.209,120.473 490.417,118.172 487.715,115.872 485.131,113.571 482.694,111.27 480.425,108.969 478.345,106.668 476.461,104.367 474.776,102.066 \n",
       "  473.281,99.7656 471.961,97.4647 470.796,95.1639 469.762,92.863 468.834,90.5622 467.987,88.2613 467.201,85.9605 466.46,83.6596 465.752,81.3587 465.072,79.0579 \n",
       "  464.417,76.757 463.791,74.4562 463.2,72.1553 462.65,69.8544 462.149,67.5536 461.703,65.2527 461.315,62.9519 460.986,60.651 460.714,58.3501 460.493,56.0493 \n",
       "  460.316,53.7484 460.174,51.4476 460.056,49.1467 459.953,46.8458 459.857,44.545 459.759,42.2441 459.654,39.9433 459.54,37.6424 456.268,37.6424 456.154,39.9433 \n",
       "  456.05,42.2441 455.952,44.545 455.855,46.8458 455.752,49.1467 455.635,51.4476 455.492,53.7484 455.315,56.0493 455.095,58.3501 454.822,60.651 454.493,62.9519 \n",
       "  454.105,65.2527 453.659,67.5536 453.158,69.8544 452.608,72.1553 452.017,74.4562 451.391,76.757 450.737,79.0579 450.056,81.3587 449.348,83.6596 448.607,85.9605 \n",
       "  447.821,88.2613 446.975,90.5622 446.046,92.863 445.012,95.1639 443.847,97.4647 442.527,99.7656 441.032,102.066 439.347,104.367 437.463,106.668 435.383,108.969 \n",
       "  433.115,111.27 430.677,113.571 428.093,115.872 425.391,118.172 422.599,120.473 419.741,122.774 416.836,125.075 413.895,127.376 410.918,129.677 407.897,131.978 \n",
       "  404.815,134.278 401.653,136.579 398.388,138.88 395.001,141.181 391.481,143.482 387.824,145.783 384.041,148.084 380.153,150.385 376.194,152.685 372.207,154.986 \n",
       "  368.243,157.287 364.358,159.588 360.607,161.889 357.043,164.19 353.713,166.491 350.654,168.791 347.894,171.092 345.446,173.393 343.311,175.694 341.482,177.995 \n",
       "  339.937,180.296 338.655,182.597 337.61,184.897 336.781,187.198 336.155,189.499 335.726,191.8 335.5,194.101 335.493,196.402 335.724,198.703 336.214,201.003 \n",
       "  336.979,203.304 338.028,205.605 339.359,207.906 340.955,210.207 342.788,212.508 344.82,214.809 347.005,217.109 349.297,219.41 351.649,221.711 354.017,224.012 \n",
       "  356.364,226.313 358.66,228.614 360.881,230.915 363.009,233.215 365.032,235.516 366.944,237.817 368.742,240.118 370.432,242.419 372.023,244.72 373.531,247.021 \n",
       "  374.98,249.321 376.396,251.622 377.81,253.923 379.254,256.224 380.758,258.525 382.35,260.826 384.052,263.127 385.879,265.427 387.837,267.728 389.927,270.029 \n",
       "  392.136,272.33 394.449,274.631 396.837,276.932 399.267,279.233 401.699,281.533 404.09,283.834 406.392,286.135 408.563,288.436 410.566,290.737 412.374,293.038 \n",
       "  413.978,295.339 415.384,297.639 416.616,299.94 417.716,302.241 418.736,304.542 419.736,306.843 420.777,309.144 421.91,311.445 423.177,313.745 424.602,316.046 \n",
       "  426.193,318.347 427.94,320.648 429.82,322.949 431.799,325.25 433.837,327.551 435.895,329.852 437.934,332.152 439.918,334.453 441.821,336.754 443.618,339.055 \n",
       "  445.294,341.356 446.837,343.657 448.239,345.958 449.494,348.258 450.602,350.559 451.564,352.86 452.385,355.161 453.072,357.462 453.636,359.763 454.093,362.064 \n",
       "  454.459,364.364 454.753,366.665 454.993,368.966 455.197,371.267 455.382,373.568 455.56,375.869 460.248,375.869 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4302)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  460.248,375.869 460.426,373.568 460.611,371.267 460.815,368.966 461.056,366.665 461.349,364.364 461.715,362.064 462.172,359.763 462.736,357.462 463.423,355.161 \n",
       "  464.244,352.86 465.206,350.559 466.314,348.258 467.569,345.958 468.971,343.657 470.514,341.356 472.19,339.055 473.988,336.754 475.89,334.453 477.874,332.152 \n",
       "  479.913,329.852 481.971,327.551 484.01,325.25 485.989,322.949 487.869,320.648 489.616,318.347 491.206,316.046 492.632,313.745 493.898,311.445 495.032,309.144 \n",
       "  496.072,306.843 497.073,304.542 498.093,302.241 499.192,299.94 500.424,297.639 501.83,295.339 503.434,293.038 505.243,290.737 507.245,288.436 509.416,286.135 \n",
       "  511.719,283.834 514.109,281.533 516.541,279.233 518.972,276.932 521.36,274.631 523.672,272.33 525.882,270.029 527.971,267.728 529.93,265.427 531.756,263.127 \n",
       "  533.458,260.826 535.05,258.525 536.555,256.224 537.998,253.923 539.412,251.622 540.828,249.321 542.277,247.021 543.786,244.72 545.377,242.419 547.066,240.118 \n",
       "  548.865,237.817 550.776,235.516 552.799,233.215 554.927,230.915 557.148,228.614 559.444,226.313 561.792,224.012 564.16,221.711 566.511,219.41 568.803,217.109 \n",
       "  570.989,214.809 573.02,212.508 574.853,210.207 576.449,207.906 577.78,205.605 578.829,203.304 579.595,201.003 580.084,198.703 580.315,196.402 580.308,194.101 \n",
       "  580.082,191.8 579.654,189.499 579.027,187.198 578.198,184.897 577.153,182.597 575.871,180.296 574.327,177.995 572.497,175.694 570.363,173.393 567.915,171.092 \n",
       "  565.154,168.791 562.096,166.491 558.765,164.19 555.201,161.889 551.45,159.588 547.565,157.287 543.601,154.986 539.614,152.685 535.655,150.385 531.767,148.084 \n",
       "  527.984,145.783 524.328,143.482 520.807,141.181 517.421,138.88 514.156,136.579 510.993,134.278 507.912,131.978 504.89,129.677 501.913,127.376 498.972,125.075 \n",
       "  496.067,122.774 493.209,120.473 490.417,118.172 487.715,115.872 485.131,113.571 482.694,111.27 480.425,108.969 478.345,106.668 476.461,104.367 474.776,102.066 \n",
       "  473.281,99.7656 471.961,97.4647 470.796,95.1639 469.762,92.863 468.834,90.5622 467.987,88.2613 467.201,85.9605 466.46,83.6596 465.752,81.3587 465.072,79.0579 \n",
       "  464.417,76.757 463.791,74.4562 463.2,72.1553 462.65,69.8544 462.149,67.5536 461.703,65.2527 461.315,62.9519 460.986,60.651 460.714,58.3501 460.493,56.0493 \n",
       "  460.316,53.7484 460.174,51.4476 460.056,49.1467 459.953,46.8458 459.857,44.545 459.759,42.2441 459.654,39.9433 459.54,37.6424 456.268,37.6424 456.154,39.9433 \n",
       "  456.05,42.2441 455.952,44.545 455.855,46.8458 455.752,49.1467 455.635,51.4476 455.492,53.7484 455.315,56.0493 455.095,58.3501 454.822,60.651 454.493,62.9519 \n",
       "  454.105,65.2527 453.659,67.5536 453.158,69.8544 452.608,72.1553 452.017,74.4562 451.391,76.757 450.737,79.0579 450.056,81.3587 449.348,83.6596 448.607,85.9605 \n",
       "  447.821,88.2613 446.975,90.5622 446.046,92.863 445.012,95.1639 443.847,97.4647 442.527,99.7656 441.032,102.066 439.347,104.367 437.463,106.668 435.383,108.969 \n",
       "  433.115,111.27 430.677,113.571 428.093,115.872 425.391,118.172 422.599,120.473 419.741,122.774 416.836,125.075 413.895,127.376 410.918,129.677 407.897,131.978 \n",
       "  404.815,134.278 401.653,136.579 398.388,138.88 395.001,141.181 391.481,143.482 387.824,145.783 384.041,148.084 380.153,150.385 376.194,152.685 372.207,154.986 \n",
       "  368.243,157.287 364.358,159.588 360.607,161.889 357.043,164.19 353.713,166.491 350.654,168.791 347.894,171.092 345.446,173.393 343.311,175.694 341.482,177.995 \n",
       "  339.937,180.296 338.655,182.597 337.61,184.897 336.781,187.198 336.155,189.499 335.726,191.8 335.5,194.101 335.493,196.402 335.724,198.703 336.214,201.003 \n",
       "  336.979,203.304 338.028,205.605 339.359,207.906 340.955,210.207 342.788,212.508 344.82,214.809 347.005,217.109 349.297,219.41 351.649,221.711 354.017,224.012 \n",
       "  356.364,226.313 358.66,228.614 360.881,230.915 363.009,233.215 365.032,235.516 366.944,237.817 368.742,240.118 370.432,242.419 372.023,244.72 373.531,247.021 \n",
       "  374.98,249.321 376.396,251.622 377.81,253.923 379.254,256.224 380.758,258.525 382.35,260.826 384.052,263.127 385.879,265.427 387.837,267.728 389.927,270.029 \n",
       "  392.136,272.33 394.449,274.631 396.837,276.932 399.267,279.233 401.699,281.533 404.09,283.834 406.392,286.135 408.563,288.436 410.566,290.737 412.374,293.038 \n",
       "  413.978,295.339 415.384,297.639 416.616,299.94 417.716,302.241 418.736,304.542 419.736,306.843 420.777,309.144 421.91,311.445 423.177,313.745 424.602,316.046 \n",
       "  426.193,318.347 427.94,320.648 429.82,322.949 431.799,325.25 433.837,327.551 435.895,329.852 437.934,332.152 439.918,334.453 441.821,336.754 443.618,339.055 \n",
       "  445.294,341.356 446.837,343.657 448.239,345.958 449.494,348.258 450.602,350.559 451.564,352.86 452.385,355.161 453.072,357.462 453.636,359.763 454.093,362.064 \n",
       "  454.459,364.364 454.753,366.665 454.993,368.966 455.197,371.267 455.382,373.568 455.56,375.869 460.248,375.869 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4300)\" points=\"\n",
       "496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 \n",
       "  \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  496.298,62.931 562.315,62.931 562.315,32.691 496.298,32.691 496.298,62.931 \n",
       "  \"/>\n",
       "<polygon clip-path=\"url(#clip4300)\" points=\"\n",
       "502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \" fill=\"#009af9\" fill-opacity=\"1\"/>\n",
       "<polyline clip-path=\"url(#clip4300)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
       "  502.298,53.859 538.298,53.859 538.298,41.763 502.298,41.763 502.298,53.859 \n",
       "  \"/>\n",
       "<g clip-path=\"url(#clip4300)\">\n",
       "<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 544.298, 52.311)\" x=\"544.298\" y=\"52.311\">y</text>\n",
       "</g>\n",
       "</svg>\n"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@df df violin(:z, :y, label=\"y\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 0.6.2",
   "language": "julia",
   "name": "julia-0.6"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "0.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
